# Ontology API Source: https://docs.meetdoris.com/api-reference Read the deals, accounts, people, meetings and commitments in your Doris workspace over REST. The Ontology API is a REST API over the ontology of your workspace. It reads the same data as the [MCP server](/mcp-server). The reference pages in this section list every route and parameter. | | | | - | - | | Base URL | `https://server.meetdoris.com/api/v1/ontology` | | Authentication | `Authorization: Bearer ` | | Format | JSON | ## Create an API key You must be a workspace admin. 1. In Doris, open **Settings > Workspace > Developer**. 2. In **API Keys**, click **Create Key**. 3. Enter a name for the key, then click **Create**. 4. Copy the key. Doris shows it once only. A key starts with `sk-live-`. A workspace can have up to 25 keys. To revoke a key, click its delete icon in the list. ## What a key can do A key works only on routes under `/api/v1/ontology/`. Keys that you create in the app have the scopes `ontology:read` and `events:read`. With these scopes, a key can call `GET` routes only. `PATCH` and `POST` routes need the `ontology:write` scope. The app does not create keys with that scope. A key belongs to the workspace, not to a person. A call with a key counts as an agent call. The server refuses any action that can reach a buyer unless a person starts it. ## First request ```bash theme={null} curl "https://server.meetdoris.com/api/v1/ontology/deal?limit=5&sort=amount:desc" \ -H "Authorization: Bearer $DORIS_API_KEY" ``` The response has `results`, `total`, `count`, `offset` and `limit`. To get one deal with related data, use `expand`: ```bash theme={null} curl "https://server.meetdoris.com/api/v1/ontology/deal/$DEAL_ID?expand=stakeholders,commitments" \ -H "Authorization: Bearer $DORIS_API_KEY" ``` The response has `record`, one key for each expand key, `_links` and `_meta`. ## Find the types The types depend on your workspace. Call `GET /types` to list them. Call `GET /types/{type_name}` to get the properties, expand keys, writable fields, actions and measures of one type. ## Limits * **10,000 requests a day** for each workspace. All keys in a workspace share this quota. The MCP server uses the same quota. * Each route also has a per-minute limit for each workspace: 300, 120 or 60 requests. Each reference page gives the limit of its route. When the daily quota is used up, the API returns `429` with the error `quota_exceeded`. ## Errors An error response has this shape: ```json theme={null} { "error": "unknown_type", "message": "Type 'insight' not registered" } ``` | Status | Example `error` values | | - | - | | `400` | `missing_query`, `too_many_expand_keys`, `invalid_request`, `validation_error` | | `403` | `forbidden`, `no_tenant` | | `404` | `not_found`, `unknown_type`, `internal_call_restricted` | | `409` | `conflict` | | `429` | `quota_exceeded`, `cooldown` | ## Privacy Read routes take a `privacy` parameter: `full`, `masked` or `anonymous`. The default is `full`. See [Privacy modes](/privacy). # Get historical analogues of a deal Source: https://docs.meetdoris.com/api-reference/deals/get-historical-analogues-of-a-deal /openapi.json get /deal/{deal_id}/historical-analogues Returns other deals whose recorded state is similar to the latest state snapshot of this deal. `state` tells you if results are ready. If `state` is not `ready`, `analogues` is empty. Rate limit: 300 requests per minute for each workspace. # Traverse object links Source: https://docs.meetdoris.com/api-reference/graph/traverse-object-links /openapi.json get /{type_name}/{object_id}/links Returns the objects that are linked to one object. Rate limit: 300 requests per minute for each workspace. # Aggregate objects of a type Source: https://docs.meetdoris.com/api-reference/query/aggregate-objects-of-a-type /openapi.json get /{type_name}/aggregate Counts objects, or computes declared measures, grouped by one dimension or by time. `GET /types/{type_name}` lists the measures and dimensions of a type. This endpoint does not take a `privacy` parameter. Rate limit: 120 requests per minute for each workspace. # List objects of a type Source: https://docs.meetdoris.com/api-reference/query/list-objects-of-a-type /openapi.json get /{type_name} Returns a page of objects of one type. Rate limit: 300 requests per minute for each workspace. # Search across all types Source: https://docs.meetdoris.com/api-reference/query/search-across-all-types /openapi.json get /search Searches the index across all types. Results come back ranked by relevance. Rate limit: 120 requests per minute for each workspace. # Resolve a single object Source: https://docs.meetdoris.com/api-reference/resolve/resolve-a-single-object /openapi.json get /{type_name}/{object_id} Returns one object by type and ID. Use `expand` to add related data, for example `stakeholders`, `commitments` or `meetings`. Each expand key comes back as a top-level key next to `record`. Rate limit: 300 requests per minute for each workspace. # Resolve several objects Source: https://docs.meetdoris.com/api-reference/resolve/resolve-several-objects /openapi.json get /batch Returns up to 50 objects in one call. Each result has `record`, `_links` and `_meta`. A reference that fails goes into `errors` and does not stop the others. Rate limit: 60 requests per minute for each workspace. # Get the OpenAPI document Source: https://docs.meetdoris.com/api-reference/schema/get-the-openapi-document /openapi.json get /openapi.json Returns an OpenAPI 3.1 document that the server builds from the types in your workspace. Rate limit: 300 requests per minute for each workspace. # Get type schema Source: https://docs.meetdoris.com/api-reference/schema/get-type-schema /openapi.json get /types/{type_name} Returns the full schema of one type: properties, expand keys, writable fields, actions, computed properties, measures and dataset capabilities. Rate limit: 300 requests per minute for each workspace. # List all object types Source: https://docs.meetdoris.com/api-reference/schema/list-all-object-types /openapi.json get /types Returns every object type in your workspace. Each type has its properties, expand keys, writable fields, actions, measures and dataset capabilities. Rate limit: 300 requests per minute for each workspace. # Run an action on an object Source: https://docs.meetdoris.com/api-reference/write/run-an-action-on-an-object /openapi.json post /{type_name}/{object_id}/actions/{action_name} Runs a named action on one object. `GET /types/{type_name}` lists the actions of a type, with a `params_schema` for each. A call with an API key counts as an agent call. The server refuses an action that can reach a buyer unless a person starts it. An API key needs the `ontology:write` scope for this call. Keys that you create in the Doris app have `ontology:read` and `events:read` only, so they get `403`. Rate limit: 60 requests per minute for each workspace. # Update fields on an object Source: https://docs.meetdoris.com/api-reference/write/update-fields-on-an-object /openapi.json patch /{type_name}/{object_id} Writes typed fields on one object. The server accepts only the fields that the type lists in `writable_fields`. Today these types have writable fields: `commitment` (`description`, `owner_type`, `due_date`), `calendar_event` (`join_requested`) and `composition` (`title`, `body`). An API key needs the `ontology:write` scope for this call. Keys that you create in the Doris app have `ontology:read` and `events:read` only, so they get `403`. Rate limit: 60 requests per minute for each workspace. # What's New Source: https://docs.meetdoris.com/changelog The latest features, improvements, and integrations from Doris. **AI processing in the EU for every customer:** The AI inference, embeddings and transcription Doris runs on Microsoft Azure now run in Microsoft's EU Data Zone. Inference and embeddings run in France Central and fail over to Germany West Central. Transcription already ran in the EU Data Zone. Until today, a customer who had not asked for UK or EEA processing was served from global Azure deployments, which Microsoft may process in any region, including the United States. **Fewer transcription errors:** Doris now transcribes calls with a more accurate speech model. In our evaluations it makes about 63% fewer word errors. **Web search stays in the US:** Chat's web search, account news and Monitors use Exa, which processes search queries in the United States. The [sub-processor list](https://dorislabs.com/subprocessors) names every provider Doris uses and where each one processes data. **Meeting summaries on a new model:** Doris writes meeting summaries with a different AI model. Before the switch we tested both models on 40 sample calls that we wrote with known content planted in them. In those evaluations, the share of statements in a summary that the transcript did not support fell from 16% to under 6%. **Objections and pain points:** Doris uses the same new model to pull objections, pain points, value drivers, competitors and decisions from a call. In our evaluations it found more than 85% of the items planted in the sample calls, up from 77%. **Commitments:** Doris finds commitments with a different model too. In our evaluations it caught at least as many real commitments as before, and it recorded about 8% of the remarks that only sound like a promise, down from 13.5%. **Fixes and improvements** * Decisions from a call show their text on the meeting page. * Integration pages say in a sentence why a connection or disconnection failed. * If a document changed after you opened it, Doris keeps the newer version and tells you your change was not saved, so you can apply it again. * An email that reaches several connected mailboxes on your team appears once in Doris. * We removed Mixpanel, Google Analytics and the Meta Pixel from the Doris web app. **Similar deals on the deal page:** The rail on each deal lists the deals most like it, one row each, with the result (won, lost or current stage) and the amount. Pills under each row show what the two deals share: a concern both buyers raised, or a competitor you met on both. Click a pill to read what the rep said about it on the other deal and what the buyer did next. When the other deal never answered the concern, the pill says so. Similar deals replaces the Deal Fingerprint panel. **Correcting the deal Doris chose for a call:** When Doris puts a call on a deal, you can answer **Right deal**, **Wrong deal**, or **Other deal** and pick one. Doris keeps your answer and will not move the call again. **Why a call has no deal:** A call that Doris could not place on a deal shows the reason on the call, for example "several deals are open on this account, and the people on the call did not point to one of them." **Account choices you make take priority over the CRM:** When you put a contact on an account and your CRM has them on a different one, Doris keeps your choice. It records the difference as an issue on the contact so you can decide which is right. **Near-empty calls:** When the notetaker records an empty room or only a few words, Doris writes no CRM note, follow-up draft, deal review or briefs for that call. The meeting shows a short note in place of a summary. **Fixes and improvements** * Calls land on the right deal more often. Doris links a call only when the evidence points to one deal, never to a deal that had already closed, and it finds the deal through the attendees' account when the call has no account link of its own. * Doris reads the whole of a long call when it extracts objections, pain points and commitments. * Decisions, value drivers and tactics from calls carry their full detail: a decision's impact category, the figure a value driver states, and a tactic's effectiveness. * Accounts keep their owner through every CRM sync, so filtering accounts by owner returns them. * A full CRM sync keeps every record type that synced when one type fails. HubSpot deals carry their last activity date. * Doris retries an update from your CRM that hits a temporary error. * A transcript you upload replaces the notetaker's recording on that meeting. A recording Doris cannot fetch shows as failed. * Meeting summaries switch to a backup model when a provider responds slowly. * A deal page that fails to load says so and offers Retry. * Table filters that exclude a value apply correctly, and a filter whose options fail to load says so. * CRM settings show a readable message when a request fails. An integration your company connected through its own OAuth app no longer shows as "coming soon". **Doris remembers how you work:** Tell Doris something about your role in chat, such as "I only cover EMEA", and it remembers it in your next conversation. The facts are private to you. Doris keeps facts about deals in the deal record, never in your memory. **Your memory in Settings:** Settings has a new Memory page under You. It lists every fact Doris holds about you, grouped by whether you told Doris or Doris inferred it. Each fact's menu has **See where this came from**, which opens the conversation, and **Forget…**, which removes the fact. **Fixes and improvements** * Doris sends a meeting summary email only for a meeting that ended in the last day. * Doris retries a meeting summary that fails the first time. * Nightly CRM syncs import closed deals as well as open ones. * HubSpot nightly syncs complete for large portals. * A Google calendar connection that lost access shows as needing to reconnect. An integration you never set up shows as not configured. * Chat answers show their cards, and the deal dimension panel opens for every deal. **Monitors** — Set a standing watch in plain language: a trigger event at an account, a competitor's pricing and launches, a regulator, or a signal every company in a sector has to announce. Write it as the headline you hope to read. Doris checks daily or weekly and writes a report when something new and verifiable appears. Select **Monitors** in the sidebar. **Accounts this touches** — A report about one of your accounts names the open deals at that account, their stage and owner. A plain web alert cannot do that. **News on the account and the deal** — A finding about an attached account also shows as **News** on the account page and on its deals, so whoever prepares for the next call sees it. **Shared with the workspace** — Everyone sees every monitor and its reports. Follow the ones you care about to be emailed when a report lands. **The document is the editor** — Click into any section of a brief, plan or debrief and type. One caret runs across the whole section, so you edit it the way you would a page, not one box at a time. Bold and italic work from the keyboard or the toolbar, and a slash menu adds a heading, a bullet list, a numbered list or a callout without knowing a shortcut. "Edit as text" is gone; there is nothing it did that the page cannot do now. **Headings that are headings** — A heading Doris writes inside a section now renders as one, on screen and in the downloaded PDF, instead of as a line of literal `#` characters in the file. **Screen and PDF agree** — Bold, italic and citations look the same in the download as on the page. A citation is a chip you can click and cannot split by typing through it. **Meetings in the language they were held in** — Doris now transcribes a call in the language spoken, translates it to English so everything downstream works as normal, and keeps the original. A toggle on the transcript and the summary switches between the two, and copying follows whichever one you are reading. A rep who sat in a Japanese meeting can read what was actually said. **Run a flow and see what it did** — A published flow can be run on demand and inspected without leaving the page. Each node card carries its configuration, its health, and what it produced on the run you have selected, so the loop of run it, read it, change it, run it again works in the product. Steps that always reported "0 results", branch steps that never said which way they went, and record lookups that showed nothing at all now report what they actually did. **Earlier versions of a document** — A document's previous versions expand from the list, so you can see what changed between the plan Doris wrote last week and the one it wrote today. **Reprocessing a meeting replaces its insights** — Reprocessing a call used to leave you with a second copy of every objection and pain point. It now replaces what it found before. **Sentinel is now five deal warnings you can check** — The old risk score put a flag on most of the pipeline, which made it wallpaper. It is replaced by five plain warnings, each a sentence you can check against the deal: going dark ("No buyer contact in 40 days — closes in 29"), stalled, slipping, moved backwards, and past its close date. Around 30% of open deals carry one; the rest carry none. They live in one **Sentinel** column on the deals table with one filter, they reach the deal page, chat and the MCP server, and they clear themselves the moment the fact behind them changes — a closed deal can no longer sit there flagged. Two long-standing faults went with it: pushed close dates were read as zero for most workspaces, and a deal moved between pipelines was counted as a deal moving backwards. **Removed: rep profiles** — The Profile page and the persona behind it have been removed. **A tidier home** — The Briefings pill is gone; new agent outputs are counted on the Agent outputs card instead. The duplicate notification bell on the homepage has been removed. **Answers keep coming when a provider is down** — A request whose model is unavailable is answered by a peer model rather than failing. **Where else you are up against them** — A competitor on the deal fingerprint now says how much of the comparable pipeline they are in — "vs Gong — in play on 4 of 62 Pharma deals". The count is the deals they actually appear in, not the number of ways their name was spelled, and it only shows once there is more than this one deal behind it. **Calls the provider never transcribed** — A meeting that was recorded but never transcribed now falls back to the recording instead of sitting unprocessed. Meetings also stop showing a video that belongs to a different call. **One bad field no longer costs you a sync** — A single malformed number coming back from your CRM used to discard that workspace's whole sync. It now skips the field and keeps the rest. **A reused invite gets its own meeting** — Recurring or copied calendar invites reused for a different call now create their own meeting rather than overwriting the one that was captured. **Your own colleagues are not buyer contact** — Internal-only email threads no longer link a deal or count towards last contact, so "no buyer contact in 40 days" means what it says. **The Deal Fingerprint** — The deal page now leads with what makes this deal different: its concerns ranked by how much more they come up here than across comparable deals, with the comparison set chosen once for the whole section. Competitors sit on the fingerprint alongside objections and pain points. The strip above it shows how long the deal has sat in its current stage, and a deal with nothing to say yet shows the shape of what it will fill in rather than collapsing. **Records in one place** — Deals, Companies, People, Commitments and Data quality share one tab strip under a single **Records** entry in the sidebar, and switching between them keeps the page around you instead of rebuilding it. Deal Hygiene is now the **Fields** view inside Data quality; old links still land in the right place. **Filter by what a record is not** — Every select filter offers **Refine by** and **Exclude**, so "every deal except Enterprise" is one click, and the chip reads "not Enterprise" so it cannot be mistaken for the opposite. **Shared recordings you control** — Sharing a recording can now set a password, and the share dialog lists every live link so you can revoke one or change its password. A viewer with the link is never sent to a sign-in screen, and the shared page carries your recording, not our branding. **Download the transcript** — Every user can download a meeting's transcript, with timestamps counted from the start of the call. **A flow alert says what moved** — The email a flow sends when it refreshes a plan now names the deal and lists each cell that changed, before and after, instead of the same four sentences for every deal. **Close plans that tell the truth** — The competitive section and the buying committee in an Opportunity & Close Plan were empty on every deal; they now read the deal's actual competitors and stakeholders. A commitment moves one milestone, the best match, rather than every milestone whose keyword it happened to contain. **Download a document and get all of it** — Long table cells and long lists used to stop short in the downloaded PDF, ending in an ellipsis or a "+3 more" that had nothing behind it. On screen those are buttons you can open; in a file there is nothing to click. Downloads now carry the full text of every cell, every bullet and every source, so a brief or a plan is something you can send on to your team as it is. **Every document says which deal it is about** — Documents Doris writes about a deal now name that deal at the top, on screen and in the download, and the deal's name is in the file name too. Downloading plans for six deals no longer leaves you with six identically named files. **Roundtable has been removed** — The shared rep and buyer deal room is no longer part of Doris. Rooms that were created are gone. Any share link you sent to a buyer now shows a short note telling them the room has closed, so nobody hits a broken page or a sign-in screen. The Roundtable tab has been taken off the deal page, and the roundtable actions have been dropped from the MCP server. Commitments are unaffected. They stay on the deal, where Doris tracks who owes what and when it is due, and drafts the follow-up when something is outstanding. **Meeting summaries get the date right** — Summaries now know when the call happened, so "by September" or "next Tuesday" resolve against the meeting rather than a guessed year. Deadlines mentioned on a call no longer land in the wrong year, and anything genuinely ambiguous is written the way it was said instead of being invented. **Invite your team** — Inviting a teammate now creates their account and emails them a link to set a password. Previously an invitation left them at a sign-in screen for an account that did not exist. Resending an invitation repairs anyone left stranded by that. **Framework assessments finish the job** — Call assessments were quietly running out of room to answer and falling back to a smaller model. They now have the headroom they need and run on a model that reads timelines more carefully. **Connect a provider with your own app** — Integrations you set up through your own OAuth app or API key now connect and read as connected everywhere, and every provider links to its own setup instructions rather than ours. The catalog is one list ordered by what you can actually do with each provider, and nothing is marked "coming soon" any more. **Pick a flow build back up** — Unfinished flow builds are now listed as drafts you can resume or discard, reachable from the scope card they belong to. Empty builds no longer clutter the list. **External API steps on the canvas** — Steps that call an outside API get their own card, on drafts as well as published flows, so you can see what a flow reaches for before you run it. **See why a step failed** — A flow node that returned an error now says so, even when the run itself completed. CRM write steps name the fields they wrote and the fields they skipped, so a partial write is no longer indistinguishable from a full one. **Sharper first-meeting prep** — A first meeting with a company you have no deal with still gets a brief, and prep drops the sections it has nothing to say about instead of showing empty headings. **Objection Memory** — The deal cockpit now shows how objections like this one have actually gone before: what was said in response, how the buyer reacted, and what happened to those deals. Every claim links to the call it came from, and Doris says plainly when the history behind a pattern is too thin to lean on. **Your CRM fields, in one place** — Importing CRM fields and choosing what Doris may read and write now happens in a single dialog. The Fields page states exactly which fields an automation is allowed to write, so there is no guessing why a flow could not update something. **Next step and open commitments on the Deals table** — Both are now columns you can sort and scan, so the state of a deal is legible without opening it. **One row per connection** — Integrations lists a row per connection rather than per provider, with each capability's status visible inside the collapsed row. **Flows you can manage** — Delete a flow straight from the table, rename a chat channel, and see each flow card name its own trigger. A notify step bound to Slack or Teams wears that platform's mark and posts only to the channel it names. **Webhooks where you are building** — Paste a channel webhook per flow, right above the composer, instead of going to Settings first. **Recycle bin for conversations** — Admins can reach recently deleted conversations from the conversations list. **Describe the automation, get the flow** — Flows now start as a conversation. Say what you want to happen and Doris proposes the smallest graph that does it, names it, and shows you the wiring before anything runs. Pick a trigger or let Doris choose, set a schedule or narrow when it fires in plain language, then dry-run the whole thing from the chat — a test run is a proper outcome now, not a guess. Decide whether a flow is yours alone or the whole company's, and version history sits in the page header so you can always see what changed. **Connect the tools you already use** — A new integration catalog brings hundreds of providers into Flows. Connect Slack or Linear in a few clicks, or bring your own API key. Flows can now read from and call external APIs directly, so an automation isn't limited to what lives inside Doris. Your flow connections are personal and kept apart from workspace settings. **Doris speaks where your team already talks** — Flows can post to Slack or Teams. Paste a webhook while you're building the flow — from the Flow integrations sheet, or straight from the chat when Doris notices your flow notifies and no channel is connected yet — then each notify step picks which channel it posts to, so pipeline slips go to #revops and onboarding alerts go to #csm. Settings keeps the register of every connected channel. **Flow runs, in the open** — Runs have their own destination: a filterable log of everything that has executed, expandable into any flow's recent history, with the documents and artifacts each run produced linked right from the feed. **Your CRM fields, your way** — Map any custom CRM deal field on a new **Fields** page in Settings, then see those fields on the deal page and add them as columns in your lists. **Prepare before the call** — Upcoming meetings now have a page of their own, opening on the pre-call brief itself rather than a cover. Turn recording on or off for any upcoming meeting straight from the conversations list. **Frameworks in Enablement** — Framework detail now reads as a grading matrix, and prebuilt frameworks can be adopted without leaving the page. **Charts for everyone** — The chart and dashboard platform is now on for every workspace, with conversational chart building available throughout. Ask Doris for a report and it opens right beside the chat — then keep talking to shape it. Ask for a punchier summary or a new title and watch the document update in place while you chat. * **Live split view** — Reports produced in chat open in a panel beside the conversation and update as Doris edits * **Edit by asking** — Tell Doris what to change in plain language; every edit lands in the document's version history, attributed to Doris * **Your edits and Doris's, together** — Click into the document and edit by hand any time; nothing is lost when Doris makes the next change * **Edit with Doris anywhere** — Every document has an Edit with Doris button that reopens the conversation that created it, or starts a fresh one with the document in context **The Pathway** — Doris now plans your week. It scans your deals for the work with evidence behind it — commitments coming due, meetings that need prep, deals gone quiet, deals with nothing booked next, drafts waiting to send — scores every candidate by deal value, stage, and urgency, and lays out each business day as a route of up to five moves. The map shows the work you've already done, today's route, and the scored alternatives beside it, with your quarter's destination at the end of the line. **Work clears itself** — Do the work and the Pathway notices. Sending the deliverable completes its commitment, a buyer's reply wakes a quiet deal, and booking a meeting clears the "book the next step" move. The plan recalculates as your deals change and tells you what changed and why. **Commitments complete from your sent email** — Doris's upgraded detector reads your outbound email and marks a commitment done when the evidence shows the promise was kept — zero false completions in evaluation. One press in the Pathway completes a commitment everywhere it lives, and the Complete-with buttons open ChatGPT or Claude with the deliverable already briefed. **Briefings on Home** — Your reports now live under **Briefings**: a Home pill that shows your latest leadership weeklies, closure reports, and digests, with a badge for anything you haven't seen yet. Open the popover to jump straight to any of them. **Ask Doris about a report** — Reports are now something you can talk to. Mention one in chat and Doris reads the full document to answer, and every report cites its sources as numbered, clickable references — on screen and in the PDF export. **A Sharper Chat** — Doris chat shows its work as it goes: a step-by-step timeline of what it's checking, the sources behind the answer, and suggested follow-up questions when there's more to explore. Web search is always on, and opening a chat from Home now animates smoothly into the conversation. **Import from SharePoint & OneDrive** — Connect Microsoft SharePoint or OneDrive and pull documents straight into your knowledge base, browsable by site and drive. Tag any document to keep your library organized. **Reconnect Expired Integrations** — When a CRM connection's authorization expires, Doris now spots it across every provider and shows a clear "Auth expired — reconnect" state on the source, so a silent sync failure doesn't go unnoticed. **Faster List Actions** — Select multiple rows and act in bulk — mark commitments complete or cancel them in one go — with overdue items emphasized. Lists show real record counts, and reps now land on **My deals** by default. **Captured Signals on Meetings** — The meetings list shows which signals Doris captured from each call as at-a-glance badges. **The Catalog** — A new home for everything you can add to your workspace. Browse charts, flows, and frameworks with live previews, open any item on its own detail page, and put it to work in a click: add a chart straight onto one of your dashboards, or adopt a framework into your account. **Request a Flow** — Don't see the automation you need? A **Request a flow** button in the Catalog (and on any flow) sends your request straight to our team, with a clear turnaround commitment shown up front. **Redesigned Contact & Company Pages** — Contact and company pages have been rebuilt to match the deal page: key details in the sticky header, tabbed sections for deals, people, engagement, and AI narrative, and a live activity timeline alongside. **Document Sections Sidebar** — Doris documents (leadership reports, briefs, digests) now have a table of contents: every section listed with its word count, the section you're reading highlighted as you scroll, and one-click navigation. Document text also renders properly formatted — headers, bold, and bullets — on screen and in the PDF export. **More Sentinel Reactions** — When Sentinel spots an unaddressed pain point or a deal that's gone quiet, Doris now drafts a suggested play as an action card — a pain connector and a deal rescue join the existing stall, competitor, and objection responders. **What's New in the App** — A What's new button on Home opens the latest product updates without leaving the console. **Framework Enablement** — A new top-level **Frameworks** page puts qualification frameworks in your hands: enable the built-in MEDDPICC or SPICED, attach frameworks to specific call types, and inspect the full scoring rubric behind every dimension. **Add-Framework Wizard** — Create your own framework three ways: build it from scratch, generate it from a document you already have (a sales playbook, a methodology PDF), or adopt a curated one from the Catalog. **Framework Trends on Dashboards** — New dashboard charts track qualification over time: score trend, coverage, and a scorecard by rep — each viewable across deals or individual calls. Scoring also now always reflects your **latest** assessment, so scores can go down when a deal's story changes, not just up. **Commitment Filters** — Filter commitments by deal and by deal owner, with the view defaulting to your own. **Flows at a Glance** — The Flows page now shows per-flow run counts, remembers which tab you were on, and lets you refresh execution history on demand. **Cleaner Navigation** — The sidebar has been reorganized around **Home** and **Automation**, and console URLs are shorter and shareable. **Sentinel Reactions** — Sentinel no longer just flags a deal — it acts. When it spots a stall, a competitor mention, or an unhandled objection, Doris drafts a suggested response as an action card on the deal: a stall advisor, a competitive responder, and an objection handler, each grounded in that deal's own history. **Follow-Ups in Your Voice** — After a deal-linked call, Doris can draft the follow-up recap written the way *you* write — learned from your own sent emails — and deliver it to your inbox ready to send. Doris never emails your buyer; the draft always comes to you. **Sequences Redesign** — Outbound campaigns got a full rework: a cleaner campaigns table with inline approve/reject, and a campaign view where the email cadence is the hero — every step shown in full with its timing — alongside targeting, the experiment behind the campaign, and live performance. **Positive Replies Flow Into Your CRM** — When an outbound prospect replies positively, Doris creates the company and contact in your CRM automatically, so nothing hot sits outside your pipeline. **Meeting Deletion with a Safety Net** — Admins can now delete a meeting. Deleted meetings sit in a recovery window before being permanently purged, so a mistaken click is reversible. **Clearer Flow Branching** — Flow diagrams now render decision points as explicit forks, showing exactly where a run continues and where it stops. **Meetings on Home** — Home now opens with your day: an agenda card of upcoming meetings, and an Ask-anything composer that knows your calendar — ask "what's my next meeting?" and Doris answers from the real invite. **See Inside Your Flows** — Click any step in a flow diagram to see what it does and what it produces, in plain language. The flow graph is now full-bleed with a run summary showing who the flow runs for, what feeds it, and when it runs. **Sharper Leadership Brief** — The weekly leadership brief adds a close-time trend, rep activity measured by external meetings held, and a new-deals count with week-over-week change. **Redesigned Event Feed** — The activity feed is now edge-to-edge with an event-type filter, deal names and links resolved on every event, and clearer change tracking on deal updates. **More Grounded Chat** — Doris chat now always answers from your data — no more half-answers when a question needs several lookups. **Record Health** — A new data-quality surface that finds the issues quietly eroding your CRM — deals with no owner, unlinked calls, missing companies — and helps you fix them. Each issue shows its severity and a resolve panel with a previewed fix; apply it in a click, repair it by hand with search, or dismiss it. Every fix says whether it writes back to your CRM or stays Doris-side. Issues are re-scanned every 3 hours and resolved ones clear automatically. You'll find entry points across the console: a Records health card on Home, an alert chip on your CRM source card, and an issues panel on each deal. **Send a Notetaker from Home** — Send a bot to any meeting straight from the Home composer, optionally attached to a deal. **Better Transcript Search** — Searching your calls (in chat and over MCP) now finds what you meant more often — smarter matching, wider recall when nothing hits, and number-format variants ("50k" finds "50,000"). **Your Name, Your Settings** — Set your first and last name in account settings; Developer tools (API keys, webhooks, MCP) moved into **Settings → Developer**. **Ontology write tools (MCP)** — The Doris MCP server can now *act*, not just read. Two new tools, `ontology_update` (set fields) and `ontology_action` (run a named action), let an AI agent connected to Doris complete a commitment, edit its due date, or reopen it, all through the same typed, governed layer your reads come from. Agents discover what's writable per entity live via `ontology_types`, so nothing is hard-coded. Writes are governed: they need an explicit **write** permission (read-only connections can't change anything), they're scoped to your own data, and anything that would reach a buyer (like a reminder) is reserved for a person — never an automated agent. See [MCP Server](/mcp-server) for the tools and scopes. **Redesigned Console** — The app shell has been rebuilt with a cleaner sidebar and a faster, more consistent layout across every page. **⌘K Command Palette** — Press **⌘K** (or **Ctrl+K**) anywhere to jump to any deal, page, or action — and to **Ask Doris** without leaving what you're doing. **Guided Source Setup** — Connecting your data is now a set of step-by-step cards. **Console > Sources** walks you through linking your CRM, calendar, notetaker, email, and lead tools, with each connection showing its status at a glance. **More Accurate Deal Intelligence** — The objections, commitments, risks, competitors, and stakeholders Doris surfaces on your deals now run through a verification layer that grounds every item in real evidence from your calls and emails. The result: fewer false or vague extractions, and intelligence you can trust enough to act on. **Manage CRM Connections in the Console** — Connect and reconnect your CRM directly from **Console > Sources**. If a connection drops or needs re-authorization, Doris now surfaces it clearly and lets you fix it in a click — reusing your existing setup so you don't start over. **GoHighLevel Deal Linking** — Meetings now link correctly to GoHighLevel deals, so deal reviews and intelligence populate for GoHighLevel-connected teams. **Redesigned Deal Page** — The deal detail page has been rebuilt as a unified intelligence dashboard. Everything about a deal — health metrics, execution status, buyer intelligence, strategy, and evidence — is now on a single page organized into tabs. No more navigating between separate views. * **Deal Pulse** — At-a-glance health badges show commitment completion, risk level, and qualification score. Click any badge to jump directly to its detail tab. * **Execution Tracker** — Commitments, risks, and stakeholders are surfaced with status indicators so you can see what needs attention without digging. * **Buyer Intelligence** — Objections, pain points, and value drivers extracted from your meetings and emails, organized by theme. * **Strategy & Competitors** — Competitive positioning and recommended tactics, updated automatically as new evidence comes in. **Automation Flows** — A new **Console > Flows** page shows the automation workflows running in your account. Each flow is visualized as a step-by-step diagram. Toggle flows on or off, view execution history, and inspect outputs — all from the console. **Flow Catalog** — Browse available automation templates in **Console > Catalog**. Click any template to preview its workflow diagram before installing. Templates are tagged by trigger type (schedule, event, manual) and audience. **Ontology-Powered Outbound** — Doris now runs outbound campaigns that learn from your closed deals. ICP profiles are auto-discovered from your won deals — the ontology extracts which pain points, value drivers, objections, and personas define each buyer segment. No manual persona docs needed. **AutoResearch Loop** — A daily research loop evaluates campaign results, promotes winning messaging, and proposes the next experiment automatically. Each tranche tests one variable (subject line, hook, value prop, CTA) against a baseline. Winners are ratcheted forward; losers are discarded. The system compounds — every experiment makes the next one smarter. **Growth Dashboard** — A new **Growth** section in the sidebar with three views: **Campaigns** (pending approval, active table, completed table with outcome badges), **ICP Profiles** (auto-generated segments with firmographics, personas, and signal counts), and **Hypothesis Log** (timeline of every experiment with the agent's reasoning and outcome). **Campaign Approval Flow** — The research loop builds everything — finds prospects, writes the email sequence, creates the campaign — and queues it for your review. You see the hypothesis, email copy, lead sample, and reasoning. Approve, edit, or reject with feedback. **Lead Provider Integration** — Connect your outbound sending tool from **Console > Sources**. Doris handles lead dedup (no one gets contacted twice), blocklist sync (unsubscribes are permanent), and GDPR compliance (auto-purge of non-responder data after 90 days, right-to-erasure endpoint). **Smarter Search Ranking** — Search results from the MCP server now prioritize title matches over content buried deep in meeting summaries or entity properties. Searching "demo" returns meetings with "demo" in the name first, not every meeting that happened to mention the word once. Agents can also use quoted phrases (`"pipeline review"`), boolean operators (`security AND compliance`), and negation (`demo -internal`). **Scoped Search** — Agents can now target specific parts of your data when searching. Search just titles for quick lookups, or search meeting summaries to find calls where a topic was discussed — without the two drowning each other out. **Privacy Fix** — Contacts without a name on file no longer leak their email address in search results. These now appear masked (e.g. "j\*\*\*@acme.com") consistent with the MCP privacy mode. **Unified Qualification Frameworks** — MEDDPICC, SPICED, and custom frameworks now share a single system. The old separate assessment engines have been consolidated — every framework (system or custom) runs through the same pipeline, scores the same way, and appears in the same place on the deal page. Custom frameworks are no longer limited to one per account. **Console Actions** — A new **Console > Actions** page shows the automation rules that trigger when events happen in your account (like running a framework assessment after a meeting). Each action is visualized as a flow diagram showing trigger → executor. Toggle actions on/off and view execution history directly from the console. **Similar Deals for All Frameworks** — Similar deals search now works with any active framework, not just MEDDPICC and SPICED. If you've built a custom qualification framework, Doris will find closed-won deals with similar assessment profiles and surface them in your deal brief. **Meeting Insights from Ontology** — Meeting insights (objections, competitors, tactics, pain points, and more) now load from the structured ontology layer instead of the legacy extraction pipeline. This is faster, more reliable, and consistent with how insights appear on deals and in the knowledge graph. **"All Meetings" Notetaker Policy** — You can now choose to have Doris join every meeting, not just external ones. A new three-option selector in **Settings > Notetaker** lets you pick between All Meetings, External Only, or Manual. Switching policies takes effect immediately — Doris will schedule or cancel bots for upcoming meetings to match. **Booking Tool Auto-Join** — Doris now detects external attendees from Microsoft Bookings, Calendly, and HubSpot Meetings events and automatically joins those calls. Previously these were missed because booking tools place the customer's email in the event body rather than the attendee list. **Admin Calendar & Inbox Tracking** — Admins can now pick which reps to subscribe to Outlook inboxes and calendars for, directly from **Settings > Mail & Calendar**. No action needed from each rep — the admin selects users from a list and Doris starts syncing their events and emails automatically. **Deal Board "All Quarters"** — A new "All quarters" option in the date filter lets you see your full pipeline across every quarter instead of just the current one. **MCP Privacy Mode** — The MCP server now automatically masks personally identifiable information before it reaches external AI tools. Email addresses, phone numbers, and LinkedIn URLs are masked or omitted, and names are initialed (e.g. "Adam C.") so your contacts' PII never leaves your account boundary. * **On by default** — No configuration needed. All MCP consumers (Claude, ChatGPT, Cursor, etc.) receive masked data automatically. * **Three levels** — `full` (internal use), `masked` (default for MCP), and `anonymous` (role-based identifiers like "Evaluator #1" for customer-facing exports). * **REST API support** — Add `?privacy=masked` or `?privacy=anonymous` to any ontology API endpoint to control masking for your own integrations. * **Deal owner preserved** — Internal rep names and emails on deals are kept visible in masked mode since they're your team, not customer PII. **MCP Server** — Connect your AI tools directly to your Doris data. Claude Desktop, ChatGPT, Cursor, Codex, and GitHub Copilot can now query your deals, accounts, commitments, and relationships through natural language — authenticated with your existing Doris login. Set up in **Console > MCP**. * **6 tools available** — Browse entity types, resolve individual records, list and search across your data, batch-resolve multiple entities, and traverse relationships between them. * **Secure by default** — OAuth 2.1 authentication, tenant-isolated, rate-limited. Your data never leaves your account boundary. **Webhooks** — Subscribe to real-time events from Doris. Get notified when deals update, commitments are created, meetings are processed, or emails are classified. Each delivery is HMAC-signed so you can verify it came from Doris. * **Automatic retries** — Failed deliveries retry with exponential backoff (up to 3 attempts). * **Delivery tracking** — View delivery status, response codes, and timestamps in the console. * **Pattern matching** — Subscribe to specific event types or use wildcards (e.g. `deal.*`). * Manage webhooks in **Console > Events**. **Event Log** — A real-time feed of all ontology events in your account, with type filtering and auto-refresh. Useful for debugging integrations and understanding what Doris is doing. **Meeting Prep Emails** — Doris now sends you a daily prep email the evening before your meetings. Each prep is tied to a specific deal and includes who's attending, open commitments, top risks, a key insight connecting the dots across your deal history, and suggested talking points — so you walk into every call ready. Click through to the deal page for the full context. * **Automatic deal matching** — Doris links each calendar event to the right deal based on attendee overlap, so you don't need to tag anything manually. * **Configurable** — Enabled by default. Toggle it off under **Settings > Notifications > Meeting prep emails**. **Deal Outcomes View** — A new Outcomes view on the dealboard lets you review closed deals across your pipeline. Filter by quarter, win/loss status, rep, and sort by days in pipeline or close date. Each outcome card shows the deal summary, key strategies and tactics used, and how long the deal spent in the pipeline — so you can spot patterns in what's winning and what's not. * **Strategy & tactic enrichment** — Outcome cards surface which strategies and tactics Doris identified across the deal's meetings, with frequency badges showing how often each was used. * **Quarter navigation** — Browse outcomes by quarter with an All option to see the full history. * **Team scoping** — Results respect your role: see your own deals, your team's, or the full org. **Closure Tab Redesign** — The deal closure tab has been redesigned as a single-scroll narrative. Evidence, stakeholders, lessons learned, and strategy sections now collapse into accordions so you can focus on what matters and expand the detail when you need it. **Highlight Reel Improvements** — Highlight reel rendering is now faster and more reliable. Longer meetings that previously timed out now render successfully. **Visual AI Slides** — Presentations have been completely redesigned. Doris now generates full visual image slides — not text-on-a-template, but designed images with typography, layout, and style baked in. Pick a style preset (Corporate, Modern, Minimal, and more), choose your target audience, and Doris researches your deal context before building the deck. * **Research-first outlines** — Before creating slides, a research agent gathers context from your meetings, deals, and company data so every slide is grounded in real evidence. * **Prompt-based editing** — Click any slide and describe what you want changed. Doris regenerates it in place — no template fiddling. * **Drag and reorder** — Rearrange slides with drag-and-drop in the thumbnail panel. Add new slides by typing a prompt. * **Regenerate with new settings** — Change the style, audience, or theme and regenerate the entire deck in one click. * **PDF export** — Download any deck as a PDF. **Per-Rep CRM Write-Back** — Automated actions (like writing assessment results to Salesforce) now use each rep's own CRM credentials instead of a shared admin connection. This means write-backs respect per-user permissions and audit trails in your CRM. No setup required — Doris resolves the right credentials automatically. **Admin Calendar Management** — Admins can now connect Outlook Calendar on behalf of their sales reps from **Settings > Mail & Calendar**. When an admin enables this, each rep's personal calendar connection is automatically replaced — no action needed from the rep. The calendar toggle on each rep's personal settings page is disabled while admin-managed. Disconnecting the admin calendar restores each rep's ability to connect individually. **Highlight Reel Email Notifications** — Doris now emails you when your highlight reel is ready, with a shareable link you can forward straight to your customer. The email includes the meeting title and a one-click **Share Highlights** button. Enabled by default — toggle it off under **Settings > Notifications > Highlight reel ready**. **Automated Actions** — Doris can now automatically act on what it learns from your calls. When an assessment meets the right conditions, Doris writes the results straight back to your CRM — no manual data entry required. Manage your actions from the new **Actions** tab in Settings. **Smarter Similar Deal Recommendations** — Similar won deals on the Recommendations tab now show richer context. Expand any match to see *why* it matched (shared competitors, similar stakeholders, pain alignment), *what worked* for that deal (closure summary, champion, competitive outcome), and *gap analysis* with specific advice on what you haven't done yet that the won deal did. * **Better matching** — Doris now scores matches across both MEDDPICC and SPICED dimensions (13 total instead of 8), and ranks by a composite signal that weighs competitor overlap, shared objections, and org pattern similarity — so different deals get different recommendations. * **Actionable gap advice** — Gap bullets now explain what the won deal did to overcome the same challenge, drawn from the closure report. * **Human-readable labels** — Match signals show "Pain alignment", "Champion profile", and "Competitive landscape" instead of technical dimension codes. **On-Demand Closure Reviews** — When a won deal in your recommendations doesn't have a closure review yet, Doris generates one automatically in the background. The card shows a loading state and fills in on your next visit. **Deal Closure Review Improvements** — Closure reviews now handle edge cases more gracefully. Deals with no recorded meetings or engagement data get a concise minimal review instead of an empty analysis. The review agent is faster and more focused on the target deal. **Highlight Reels** — Doris can now generate a short video reel of the best moments from any meeting. Open a recorded conversation, pick **Generate Highlights** from the Options menu, and Doris selects 5–8 standout segments — typically around two to three minutes total — and renders a polished reel with chapter markers and a custom video player. Switch between the full recording and the reel using the toggle on the video, regenerate any time, and share the reel as part of a shared transcript link. [Learn more](/features/share-recording). * **Smart selection** — A reasoning model picks segments that capture the most decision-relevant moments with variety bias so you don't get a reel of one topic. * **Chapter markers** — The custom player shows each segment as a chapter so reviewers can jump straight to the part they need. * **Included in shared links** — When a reel is ready, it appears alongside the full recording on the shared transcript page so customers and stakeholders can watch the highlights without scrubbing. **Commitment Auto-Close** — A new daily background task automatically closes stale pending and overdue commitments so your active list stays focused on what's actually live. Commitments that get auto-closed move out of the open count and into a new `auto_closed` status, preserving history without cluttering the dashboard. **Shared Video Page Redesign** — The shared transcript and video page has been refreshed to the current Doris design language — a cleaner header without the tagline, a polished loading state with a single spinner, and tighter spacing throughout. **Summary Refinement** — The intelligent meeting summary no longer includes a Risks/Concerns section. Risks are now surfaced through the Deal Risks tab where they get the full breakdown they deserve, instead of being summarized in two lines per meeting. **Light Mode Polish** — Transcript view popovers (Options, Links, Attendees), the Beacon panel, message list, and composer now render correctly in light mode. SpringMenu surfaces use solid backgrounds instead of glass for better readability. **Gamma Presentation Upgrade** — If you have Gamma connected, Doris now uses it as your default deck creator. When you ask Doris to create a presentation, it gathers context from your meetings and deals, synthesizes a customer-appropriate summary, and sends it to Gamma — producing a polished, shareable deck in under a minute. Decks are automatically set to link-viewable so your whole team can access them. * **Connection wizard** — Connect Gamma in Settings with a guided two-step flow: paste your API key, then pick a default theme and folder. Doris remembers your preferences for every deck. * **Gamma decks in your artifact list** — Gamma presentations now appear alongside native decks and documents, with the Gamma logo and an "Open in Gamma" action. * **Available to the deal agent** — When Doris decides a presentation would help advance a deal, it can generate a Gamma deck and include the share link in the deal review email. **Custom Qualification Frameworks** — Your qualification methodology is yours. Tenant admins can now define a custom framework — up to 10 dimensions, each with a name, acronym, description, and scoring rubric — that sits alongside MEDDPICC and SPICED as a first-class option across the whole product. Go to **Settings > Qualification Framework** to set it up. [Learn more](/features/custom-frameworks). * **Seed from a Library document** — Upload your existing qualification playbook and Doris will read it and pre-fill your dimensions automatically. Review and edit before saving. * **Works everywhere qualification data appears** — Custom dimensions show up in the deal Qualification tab, kanban cards, dashboards, coaching charts, chat scorecards, and ICP profiles exactly like the built-in frameworks. * **Non-destructive rollout** — Adding a custom framework replaces one built-in slot (SPICED or MEDDPICC — your choice); the other built-in stays active. Existing scoring data is preserved. **Performance** — Faster deal pages, conversations, and CRM sync across the board. **Commitments Dashboard** — A new cross-deal Commitments page gives you a single view of every open commitment across your pipeline. Commitments are grouped by day and scored by Recency, Priority, Health, and Staleness so the most urgent items surface first. Filter by view — your commitments, your team's, or the whole org — depending on your role. A dashboard widget shows your commitment snapshot at a glance. **Commitment Fulfillment Tracking** — Doris now automatically detects when a commitment has been fulfilled. When you send an email or hold a meeting that completes a promise, Doris links the evidence and marks the commitment as delivered — no manual updates required. Duplicate commitments captured across multiple calls are merged automatically so your list stays clean. **Company Page Redesign** — Company pages have been refreshed with a cleaner, more structured layout. Key details, goals, and AI summaries are now front and center in a single overview panel with a simplified sidebar. Contacts load as a compact scrollable list instead of a separate page. **Simplified Hub & Navigation** — The Hub is now four tiles focused on your most-used actions. Library views have moved into the main sidebar for faster access, and legacy collections are tucked behind a feature flag. **Smarter Deal Agent** — The deal agent has been upgraded with a faster model and a unified data layer. It now pulls deals, contacts, companies, and meetings through a single system, which means more consistent answers and better cross-referencing when you ask about relationships between records. **Knowledge Graph Improvements** — Doris now tracks which sales strategies and tactics were used in each deal, building a richer picture of what works over time. Topic extraction is more accurate with smarter deduplication and consolidation. **Ideal Customer Profiles** — Doris discovers your ideal customers automatically from your closed-deal history. Once you have 25+ closed deals connected, a discovery agent clusters them into archetypes and builds a rich profile for each — with firmographics, qualification patterns (MEDDPICC and SPICED), stakeholder patterns, messaging that resonated, and win/loss comparisons. **Deal Risks Tab** — Every deal now has a dedicated **Risks** tab that breaks down *why* a deal looks risky, not just a single score. See a 0–100 risk gauge alongside a weighted breakdown of qualification gaps, stage mismatch, close date pressure, and stage stall — plus the specific risk signals from recent calls, activity engagement warnings, and suggested actions. Learn more in the [Deals docs](/features/deals#deal-risks). **Affinity CRM Integration** — Affinity is now a supported CRM alongside Salesforce, HubSpot, and Attio. Connect with an API key, and for shared workspaces you can configure **tracked reps** to limit sync to only the opportunities owned by your sales team. Doris uses a deal-first sync pattern so unrelated workspace records are left alone. **Firmographic Extraction** — Doris now extracts firmographic details (industry, size, geography) from conversations and CRM data and surfaces them on company and deal pages — feeding ICP discovery and deal fit scoring. **Smarter Research** — Deal and company research now runs as a dedicated sub-agent so results are more focused and faster. AI Chat automatically pulls in the right evidence without flooding the conversation. **MeetGeek Integration** — You can now connect MeetGeek as a transcript source alongside Gong. Set it up from Settings with the guided wizard — Doris will automatically pull in your meeting transcripts and process them the same way. **Salesforce Sync Improvements** — Doris now runs a nightly reconciliation of your Salesforce deals, catching any opportunities that were missed during regular polling. Deals linked to calls after the fact now get qualification scores, meeting links, and assessments automatically. **Smoother Chat Navigation** — Starting a new conversation from the Hub is now faster and more reliable, with fewer loading flickers. **Light Mode Support** — The presentation editor navbar now displays correctly in light mode. **New Presentation Editor** — The presentation editor has been completely rebuilt. Create slides using smart blocks — stat cards, timelines, process steps, comparisons, icon cards, and more. Edit text inline with a single click, format with the floating toolbar, drag to reorder blocks, and insert new content with slash commands. Slides stream in as they're generated so you can start reviewing before the deck is finished. **Research-Backed Outlines** — Presentation creation now starts with an outline. Doris searches your transcripts, deal context, and meeting summaries to gather evidence for each slide. Review and edit the outline before generating — all on one page. **Theme Wizard** — A new step-by-step wizard for creating brand themes. Walk through name, logo, design style, fonts, and colors with curated presets and a live preview. Replaces the old brand kit editor with a friendlier, more visual flow. **Deal Closure Emails** — When a deal closes in your CRM, Doris now sends an email notification with the closure review summary. **Retroactive Deal Assessments** — When deals are linked to calls after processing, Doris now automatically runs the assessments that would have happened at processing time. No more missing qualification scores on late-linked deals. **Navigation Refresh** — The home page is now the Hub with quick actions. The Knowledge Base is now called Library. The Dashboard has been renamed to Performance. **Faster Deal Pages** — Deal briefs and similar deal lookups load noticeably faster. **Manager Dashboard** — Sales managers now have a dedicated dashboard inside the Library with team-wide metrics and charts. See qualification score trends, stage velocity heatmaps, dimension gap analysis, and how qualification improves call-over-call — all updated weekly. The dashboard respects role-based access, so managers see their team and leaders see the full org. **Transcript Search** — You can now search within individual meeting transcripts using full-text search. Find exactly where a topic was discussed without scrolling through the entire conversation. Results highlight matching turns with speaker names and timestamps so you can jump straight to the moment that matters. **Commitment Rescheduling** — When a commitment deadline slips, Doris now tracks the reschedule instead of losing the original date. You can see the full history of date changes on any commitment, and managers get at-risk commitments (those rescheduled multiple times) flagged in their daily email digest. Trend charts in the dashboard show rescheduling patterns across your team. **Deal Strategy Recommendations** — Doris now analyzes strategies from your won deals and surfaces recommendations on active opportunities. The deal brief and intelligence card show which approaches have worked in similar situations — grounded in your own data, not generic advice. **Beacon on Meeting Pages** — The Beacon AI assistant now works on meeting transcript pages. Ask Doris questions about the conversation you're reviewing — *"What objections came up?"* or *"Did they mention a timeline?"* — without leaving the page. **Library Redesign** — The Library now organizes everything into a clean tabbed layout. Generated content (presentations, documents, offers) and data (companies, contacts, conversations) are separated into distinct tab groups so you can find what you need faster. **Context Page Refresh** — The home page now greets you with an inline chat composer, your outbox stats, upcoming calendar, and recent meetings — everything you need to start your day in one view. **Kanban Deal Board** — A new board view at `/deals/board` shows your pipeline as draggable columns grouped by stage. Each card displays qualification gauges (MEDDPICC & SPICED), commitment indicators with inline completion, days in stage, artifact links, and outbox shortcuts. Overdue commitments float to the top. A separate column shows deals closed in the current quarter split by won/lost. Switch between list and board views with the toggle button next to the page title. **Role-Based Board Access** — The board respects team scoping: salespeople see their own deals, managers see their team's deals, and leaders see all deals — matching the outbox access pattern. **GoHighLevel CRM** — Added GoHighLevel as a supported CRM provider in admin settings. **Beacon Chat on Editor Pages** — The Beacon AI assistant now works inside the presentation and document editors. Ask Doris to make changes to your slides or documents and it proposes edits as inline diffs — accept or reject each change individually without leaving the editor. **Inline Diff Review** — When Doris proposes edits, you see GitHub-style diff cards showing exactly what will change. Presentation diffs include color swatches for design changes. Accept or reject each operation individually, and see visual indicators on slide thumbnails showing which slides have pending edits. **Deal Page Redesign** — The deal detail page has been redesigned with a two-column bento layout. Navigate between Qualification, Recommendations, Timeline, Brief, Intelligence, Summary, and Artifacts using card-based navigation. The assessment card now features collapsible dimensions and a tabbed layout for MEDDPICC, SPICED, and Playbook views. **Cross-Deal Intelligence in Briefs** — Deal briefs and the deal agent now incorporate cross-deal intelligence, surfacing patterns from similar deals, stakeholder history, and competitor context alongside your deal-specific data. **Smarter Curation** — The knowledge graph curation agent now runs twice weekly instead of weekly, keeping your graph cleaner with more frequent duplicate merging and category refinement. **Deal Portal Redesign** — The review portal has been completely redesigned. Presentations and documents are combined into a single page with clickable cards, and you can now view and interact with presentations directly in the browser. A new splash page highlights deal closure reviews and key deal cards at a glance. **Deal Intelligence Card** — Five separate deal panels — Brief, Intel, Commitments, Stakeholders, and Files — are now combined into one tabbed card. Everything about your deal is in one place, and closed deals now show Won or Lost badges in the sidebar. **Smarter Email-to-Deal Matching** — Doris now filters out internal company emails automatically and uses domain-based matching as a fallback when contact-level matching isn't available. CRM Pulse also surfaces email participants who aren't yet in your CRM, with a one-click workflow to create the contact. **Manual Commitment Completion** — You can now manually mark commitments as complete from the Commitments tab. **Context Page Refresh** — The Context page has a new layout with consolidated navigation and knowledge hub tabs for faster access to your documents and entities. **Smarter Knowledge Graph Answers** — Doris now combines multiple search strategies when answering knowledge graph questions — semantic similarity, keyword matching, and graph traversal — and fuses the results for more accurate, comprehensive responses. Ask about objections, competitors, or buying patterns and get noticeably better answers. **Automatic Graph Curation** — Doris now runs a weekly curation sweep that automatically merges duplicate entities and refines category labels across your knowledge graph. Your graph stays clean and well-organized without any manual effort. **Better Document Extraction** — Uploading documents to your knowledge base now extracts more entities with higher accuracy, and fixes an issue where entities from different documents could collide. **In-App Citations** — When the agent references a source document in chat, clicking the citation now navigates within Doris instead of opening a new tab. Document cards also show file-type icons so you can tell at a glance whether a source is a PDF, Word doc, or spreadsheet. **Knowledge Graph Explorer Improvements** — Entity type filters are now a dropdown menu for faster filtering, and buying pattern entities now show their connections to related deals and stages in the graph view. **Email Notification Preferences** — You now control exactly which emails Doris sends you. Go to **Settings > Notifications** to toggle individual email types on or off — meeting summaries, deal reviews, presentations, documents, and CRM pulse reports. Changes take effect immediately. **Team Notifications for Managers** — Sales managers can opt in to receive email copies of their direct reports' meeting summaries and deal reviews. Team emails are clearly labeled with a \[Team] prefix so they're easy to spot. **Presentation Visual Overhaul** — Slides now use absolute positioning for pixel-perfect layouts. New visual capabilities include gradient backgrounds, blur effects, shadows, borders, and expanded typography options. Charts support donut, horizontal bar, and line chart types with value labels. PPTX exports match the new visual fidelity. **Higher Quality Images** — Presentations now source stock photos from Unsplash for better visual quality, with automatic deduplication so the same image isn't downloaded twice. **Slide Library** — Save and reuse your best slides. Extract slides from uploaded PowerPoint files, tag and organize them, and insert them into any presentation with one click. Doris can also search your library and suggest relevant slides while building a deck. **Present Mode** — Present your decks directly from Doris with a new fullscreen mode. No need to download or switch tools. **Visual PPTX Preview** — Uploaded PowerPoint files now render visually in the document viewer so you can scroll through slides without downloading. **Larger Uploads** — The document upload limit is now 75MB, with progress bars so you can track large uploads in real time. **Smarter Deal Updates** — Doris now automatically reviews deals when new meetings are linked, so you get fresh qualification scores without waiting. **Light Mode Polish** — Updated search bars, meeting views, and email summaries for a cleaner look in light mode. Doris can now generate commercial offers from your deal context and knowledge base. Add pricing tiers and customize terms — all without leaving Doris. **Playbooks** — Generate data-driven playbooks from your won deals or knowledge base collections. Doris analyzes what worked — objections handled, strategies used, and patterns across conversations — and turns it into reusable guidance for your team. **Knowledge Base Tags** — Organize your knowledge base with custom tags. Tag documents, filter by label, and keep everything easy to find. Scanned PDFs are now searchable too. **Better Presentations** — Richer backgrounds, more layout variety, mood-aware color choices, and improved PowerPoint exports. A new QA review step catches issues before delivery. **CRM & Gong Improvements** — Better data linking between your CRM and Gong. Meetings now correctly associate with deals and companies, and missing CRM records are automatically filled in during sync. **Deal Closure Reviews** — When a deal closes in your CRM, Doris automatically runs a closure retrospective analyzing why the deal was won or lost. Closure events feed back into the knowledge graph, improving win rate metrics over time. Closed deals are marked with Won/Lost badges in the outbox sidebar. **Pain Point Categories** — Pain points across your pipeline are now grouped into canonical categories (e.g., "Integration Complexity", "Budget Constraints") with win rate, overcome rate, and cross-deal pattern data. See which problems your product solves best and which rebuttals work. **Knowledge Base in Chat** — Doris pulls from your uploaded knowledge base during deal conversations — product features, pricing, case studies, objection rebuttals, and competitor positioning. Source documents appear as clickable cards in the chat. **CRM Pulse** — Doris scans your CRM data and proposes field-level updates based on conversation evidence. See clear before-and-after diffs with reasoning, then apply changes to your CRM with one click. Email notifications let you know when new updates are ready. **Knowledge Graph Explorer** — An interactive, Obsidian-style visualization of everything your team has learned across deals — stakeholders, objections, competitors, and buying patterns. Filter by entity type and confidence level, merge duplicates, and explore scoped views on deal and company pages. Doris now connects intelligence across your entire pipeline. Instead of treating each deal in isolation, the new Knowledge Graph accumulates stakeholders, objections, competitors, and buying patterns from every conversation — and surfaces them wherever they're relevant. * **Organization Intelligence Card** — Company-level patterns learned from all deals with that organization: procurement cycles, decision-making structures, and stakeholder networks * **Cross-Deal Patterns Card** — Patterns that emerge across your pipeline: objection frequency by stage, competitor mentions, and buying behaviors that repeat across deals * **Objection Playbook Card** — Your most common objections ranked by frequency and win rate, with context on what approaches have worked * **Enriched Stakeholder Maps** — Stakeholder maps now show cross-deal history, so you can see how a contact has behaved in previous deals * **KG-Powered Deal Briefs** — Deal briefs pull from cross-deal intelligence, adding stakeholder history, competitor context, and risk patterns from similar deals * **Company Sentiment Themes** — Company sentiment pages now surface themes from the knowledge graph alongside trend data * **Feature Flags** — All knowledge graph features roll out gradually per team with admin-controlled feature flags **Better Memory** — Doris maintains better context across long conversations and remembers your preferences between sessions. Long chats are intelligently compacted so nothing important is lost. **Improved Reliability** — Smarter resource management, duplicate-run prevention, and automatic recovery when things go wrong. Doris now builds a living intelligence timeline for every deal — tracking commitments, flagging stalled deals, and triggering reviews from emails so your pipeline stays current without manual work. * **Intel Timeline** — A chronological feed of every deal event: call reviews, score changes, risks flagged and resolved, emails, stage changes, commitments, and stakeholder updates — filterable by event type * **Commitment Tracking** — Buyer and seller commitments are extracted from calls automatically, with status tracking and overdue detection so nothing slips * **Email-Triggered Reviews** — Doris monitors deal-related emails and posts outbox updates automatically, keeping deal intelligence fresh between meetings * **Velocity & Stall Detection** — Deals that stop progressing get flagged so you can intervene before they go dark **Conversation Analytics** — Calls are broken into phases (discovery, demo, procurement) with a compact timeline showing how time was spent. Statistics and analytics are combined into one streamlined tab. **Context Search** — Find anything in Doris instantly. Search across deals, contacts, companies, meetings, documents, and more from one search bar on the Context page. **Outlook Email Integration** — Doris tracks your Outlook email conversations and surfaces them in deal, company, and contact activity feeds. Emails are matched to contacts automatically and referenced by the AI agent. **Activity Timeline** — Deals, companies, and contacts list pages now show a visual activity timeline column so you can spot engagement patterns at a glance. **Company Domains** — Admins can manage company email domains from Admin Settings to control how contacts and meetings are matched. **HubSpot Per-Rep Syncing** — Choose which HubSpot reps to sync from Admin Settings, matching the control already available for Salesforce. **Attio CRM** — Connect Attio to sync companies, contacts, and deals automatically. Attio deals are scored using conversation evidence, just like HubSpot and Salesforce. **Linear & Jira** — Manage issues and projects without leaving chat. Search your backlog, create tickets, add comments, and more — all through natural language. **One-Click Meeting Scheduling** — When Doris recommends a meeting, it creates a scheduling card with pre-filled calendar links for Google Calendar or Outlook. Add your Calendly or Cal.com link in settings for even faster scheduling. Doris now maps every stakeholder in your deal — who has influence, who's supportive, and who you still need to win over. * **Stakeholder Map** — After each call, Doris builds a 2x2 influence-vs-disposition grid showing where every contact stands and what role they play * **Working Strategy** — Each deal brief now surfaces recommended next moves based on stakeholder positioning and qualification gaps Doris now supports light mode across the entire application. Switch between dark and light themes to match your preference or working environment. * **Light Mode** — A complete light theme that works across every page, component, and card in Doris * **Theme Toggle** — Switch between dark and light mode from Settings whenever you like * **Consistent Design** — Glass effects, cards, and sidebar all adapt seamlessly to your chosen theme Doris now connects to Salesforce alongside HubSpot — and can write back to your CRM automatically. No more manual data entry after every call. * **Salesforce Integration** — Connect Salesforce in minutes. Doris syncs your deals, contacts, and companies automatically * **CRM Write-Back** — Doris proposes field updates and call notes based on what was discussed. Review the changes and apply them with one click * **MEDDPICC Deal Filter** — Filter your deals list by qualification score to focus on what needs attention Every deal now has its own living thread. After each call, Doris reviews the conversation and posts a structured update — qualification scores, risks, next steps, and draft deliverables. Reply to ask for anything. * **Automatic Deal Reviews** — After every call, Doris posts a structured deal update with qualification evidence and recommended next steps * **Two-Way Conversation** — Reply to any thread to ask Doris for a deck, an email, a competitive analysis, or anything else the deal needs * **Manager View** — Sales managers can see outbox threads across the team, search by deal, and coach from evidence Doris can now create and edit rich documents — deal briefs, proposals, competitive analyses, and more. Ask in chat and Doris writes it using your deal context, then hand it off to a full editor for final polish. * **Document Creation** — Ask Doris for any document and it writes it using your conversations, deal data, and company context * **Rich Editor** — Tables, images, text formatting, and task lists. Edit anything Doris creates or start from scratch * **PDF & Word Export** — Download as PDF or DOCX with one click Doris now builds slide decks for you. Tell Doris what you need in chat — an ROI deck, a competitive overview, a deal summary — and it creates a full presentation grounded in your deal context and conversations. * **Slide Creation** — Ask Doris for a presentation in chat and it builds it end-to-end, pulling from your deal history, call transcripts, and company context * **Brand Kits** — Set your fonts, colors, and logo once. Every presentation Doris creates follows your brand automatically * **Grid Editor** — Drag, resize, and edit every element on your slides. Add charts, shapes, images, and text blocks * **PPTX Export** — Download any presentation as a PowerPoint file, ready to share Doris now creates PowerPoint presentations alongside Word documents. Upload a .pptx template and Doris will fill it with content tailored to your deal. * **PPTX Template Support** — Upload PowerPoint templates and create slide decks from your deal context * **PDF Template Uploads** — PDF files can now be uploaded as reference templates Create professional documents from templates. Upload a .docx template, and Doris analyzes its structure and creates personalized content based on your deal context. * **Document Templates** — Upload .docx templates that define your document structure * **Context-Driven Content** — Each section is written using your deal, company, and meeting context * **Mermaid Diagrams** — Automatically renders flowcharts and Gantt charts in created docs * PDF template parsing now supported Doris can now find deals similar to the one you're working — based on qualification evidence, not just CRM fields. Filter by deal status to see how comparable deals played out. * **Semantic Deal Search** — Find similar deals based on MEDDPICC, SPICED, and other qualification evidence * **Deal Status Filtering** — Filter similar deals by won, lost, or active to spot patterns * **Evidence Matching** — Qualification evidence is now used for intelligent deal matching Doris now renders rich, interactive cards directly in the chat — no more walls of text. Ask about a deal and get a visual deal card. Ask Doris to draft a follow-up and see a formatted email card you can copy or send. * **Deal Cards** — Visual deal summaries with key metrics rendered inline in chat * **Email Cards** — Formatted follow-up emails displayed as actionable cards * **Artifact Rendering** — Rich UI components created contextually as part of agent responses Under the hood, Doris's agent has been completely rearchitected. 28 granular tools have been consolidated into 11 focused meta-tools, making the agent faster and more accurate at finding the right context for your questions. * **Intelligent Context Discovery** — The agent now proactively seeks out relevant deal, meeting, and company context * **Better Meeting Prep** — Smarter attendee seeking surfaces what matters before your next call * **@Mention Context** — Mention a deal, company, or contact in chat and Doris automatically pulls in rich context # Commitments Source: https://docs.meetdoris.com/features/commitments See what you and your buyers promised, find what is overdue, and close it out. Commitments lists the promises Doris found in your calls and emails. It shows what the buyer owes you and what your team owes the buyer. Click **Records** in the sidebar, then click the **Commitments** tab. ## See what is due **Mine** is on by default. Click **Mine** to see the commitments of your whole team. The list shows open commitments by default, and sorts them by due date. An overdue row has a red tint and shows **· Overdue** after the date. Click **Filter** to filter on **Status**, **Type**, **Owner**, **Deal**, **Deal Owner** or **Due Date**. You can also type in **Search commitments…**. ## Close out commitments Click the checkbox on each row you want to change. Click **Mark complete** or **Cancel**. A commitment that has no linked deal cannot change status. Doris shows how many rows it changed and how many failed. ## Get help with the work The **Complete with** column has two buttons: **Complete with ChatGPT** and **Complete with Claude**. Each one opens that tool with a prompt to write the deliverable the commitment promises. The prompt reads the deal, its people, its calls and its emails through the [Doris MCP server](/mcp-server). Connect the MCP server in that tool first. ## What each column shows | Column | What it shows | | - | - | | **Commitment** | The promise. A completed or cancelled one is struck through. | | **Complete with** | Buttons that open ChatGPT or Claude with a prompt | | **Deal** | The deal the commitment belongs to | | **Type** | The kind of commitment | | **Owner** | The deal owner for your team's commitments, or **Buyer** | | **Status** | Whether the commitment is open, completed, overdue, cancelled or auto closed. The **Status** filter uses the same five values. | | **Due** | The due date | Rows do not open a page. To see a commitment in context, open its deal from [Deals](/features/deals) and click **Commitments**. An overdue buyer commitment can mean the deal is slowing down. Check the deal before you follow up. # Companies Source: https://docs.meetdoris.com/features/companies Find an account, see its deals and people, and read what Doris knows about it. Companies lists the accounts in Doris. Click **Records** in the sidebar, then click the **Companies** tab. ## Find an account Type a company name in **Search companies…**. Click **Filter** to filter on **Industry**, **Stage**, **Country**, **Annual Revenue** or **Last Contact**. The list shows **Company**, **Domain**, **Industry**, **Location**, **Deals**, **Open Pipeline**, **Last Contact**, **Sentiment** and **Activity**. The accounts with the most recent contact show first. Click a row to open the company page. ## Read a company The company page has no tabs. * **Narrative** is on the left. Doris writes this summary of the account from your calls and emails. Click a citation to see its source. * **Deals** on the right lists the deals linked to the company. * **People** on the right lists the contacts at the company. * **Activity** on the right lists calls, emails, deal changes, commitments and assessments. Use the filter to show one kind. ## Where company data comes from Companies sync from your CRM. Doris adds context from calls and emails. Your admin connects the CRM. See [HubSpot](/integrations/hubspot) or [Salesforce](/integrations/salesforce). If a deal or a person is not linked to the right company, check [Data quality](/features/record-health). # Home Source: https://docs.meetdoris.com/features/context-hub Ask Doris a question, send the notetaker, and open your meetings, deals and flows. Home is the first page you see in Doris. Open it from **Home** in the sidebar. Home has a greeting, a chat box and four tiles. The page header has a **Release log** button that shows recent product updates. ## Ask Doris a question Type in the **Ask anything** box. Name the deal, company, person or meeting when you can. A specific question gets a specific answer. Click **Prep for next meeting** or **Recap last call** below the box. Doris sends that question for you. Doris answers from your deals, companies, people, meetings, transcripts and commitments. It can also search the web and these docs, and it can write a document for you. Click **Recent chats** to open a chat you had before. Chat reads your records. It does not change them. To change a deal or a commitment, use the deal page or the **Commitments** list. ## Send the notetaker to a meeting Click **Send Notetaker** in the chat box. The **Send a notetaker** form opens. Paste the Zoom, Google Meet or Microsoft Teams link. Optional. Search in **Attach a deal (optional)** and pick the deal. Doris then links the call to that deal. ## Open your work from the tiles | Tile | What it shows | Where it goes | | - | - | - | | **Upcoming meetings** | The number of upcoming meetings and the next one | Upcoming meetings in **Meetings** | | **Agent outputs** | The documents Doris wrote for you | Your saved documents | | **Flows** | Your flows | [Flows](/features/flows) | | **Open deals** | Your open deals | [Deals](/features/deals) | ## Jump anywhere with search Press **Cmd+K** on Mac or **Ctrl+K** on Windows. Type a name or a question. * **Results** shows matching deals, companies, people and meetings. * **Ask** sends your text to Doris chat. * **Jump to** opens a page in Doris. ## Use Doris in other AI tools The small MCP icon next to the send button is **Set up MCP**. It opens [MCP server](/mcp-server). Use it to connect Claude, ChatGPT or another AI tool to your Doris data. If Home is empty, your admin must connect your CRM, calendar and meeting capture first. See [Quickstart](/quickstart). # Review a call Source: https://docs.meetdoris.com/features/conversations Find a recorded call, read the summary and transcript, and check what Doris found. After a call, Doris writes a summary, finds the key moments and links the call to your records. Use the meeting page to review all of it. ## Find a call Select **Meetings** in the sidebar. The page header reads **Conversations**. The list starts with **My calls** on and the **Status** filter set to completed calls. Turn off **My calls** to see calls your team owns. Filter by **Status**, **Call Type**, **Company**, **Owner**, **Audience** or **Date**. Or type in **Search conversations…**. Select a row to open the meeting page. The **Captured** column counts the commitments, objections and competitors Doris found in each call. An amber objection count means the call needs attention. ### Where calls come from A call shows in the list when one of these sources captures it: * The Doris notetaker. See [Prepare for a call](/features/prepare-for-a-call). * Gong, when your admin connects it. See [Gong](/integrations/gong). * MeetGeek, a legacy source that some workspaces still have. * A transcript that you upload to a meeting. See [Add a transcript](#add-a-transcript). ### Who can see a call Everyone on your team can see external calls with customers. Only the people who were on an internal call can see it. Other people see "This call is private". ## Read the meeting page The meeting page has two sides. The left side has tabs. The right side has the recording, or the transcript when there is no recording. ### Tabs **Key Points** and **Analytics** always show. The other tabs show only when Doris has content for them. | Tab | What it shows | | - | - | | **Prep** | The prep brief Doris wrote before the call. | | **Summary** | A written recap of the call. This tab opens first when it exists. | | **Key Points** | The main points of the call. | | **Analytics** | A **Sentiment Timeline** and a **Doris Found** list: objections, competitors, pain points, value drivers, tactics, decisions and product feedback. | | A framework name | How the call scores against that framework. | | **Transcript** | The full transcript, when the call has a recording. | Select the copy button beside the tabs to copy the summary or the key points. When a call was too short to summarise, Doris says "Too little was said to summarise". Read the transcript instead. ### Insights On the right side, below the recording or the transcript, Doris groups what it found by type. The types include **Q\&A Pair**, **Competitor Mention**, **Follow-up Commitment**, **Pain Point**, **Value Driver** and **Offer Feedback**. Select a type to see each item of that type. Select **Show source** on an item. Doris highlights the quote in the transcript. ## Search the transcript Type in **Search in transcript...**. Doris highlights each match. Use **Previous match** and **Next match**. Select a timestamp to play the recording from that point. Each line shows the speaker and the time. Doris works on an English copy of a call in another language. Use **Transcript language** to see the original words. Search runs on the English transcript only, so switch back to English to search. ## Check the links Doris links each call to a company and to deals. Wrong links put evidence on the wrong record. Select **Links** at the top of the meeting page. The number beside it counts the current links. Open **Company**, **Offers** or **Deals**. Search, then select the right record. To see who was on the call, select **Attendees**. ## Ask about the call Select the chat button on the meeting page. Ask Doris a question about this call. From **Home**, you can also select **Recap last call**. ## Other actions Select **Options** at the top of the meeting page. * **Share Recording** — send a link to the recording. See [Share a recording](/features/share-recording). * **Download Transcript** — save the transcript as a `.txt` file. * **Delete meeting** — admins only. Doris hides the meeting at once and deletes it after 30 days. An admin can restore it from **Recently deleted** in that time. ## Add a transcript A meeting with no transcript shows "No transcript available". You can add one. * Select **Upload VTT File** to upload a `.vtt` file up to 10MB. * Select **Paste Text**, paste the text, then select **Upload**. Lines in the form "Name: what they said" become speaker labels. Doris then processes the transcript. The summary and insights show when it finishes. ## If a call is missing or wrong * The call is not in the list. Check that **My calls** and the **Status** filter are not hiding it. * The call has no recording. The notetaker may not have been admitted. The meeting page says why. * The call is on the wrong deal. Change it in **Links**. For other link problems, see [Data quality](/features/record-health). # Enablement Source: https://docs.meetdoris.com/features/custom-frameworks See the qualification frameworks Doris scores your deals with, and add your own. Enablement shows the qualification frameworks Doris uses to score your deals. Click **Enablement** in the sidebar. Every member can open Enablement and read the frameworks. Only workspace admins can add or edit a framework. For other members, **Add framework** is not available. The page has two sections: * **Live coaching** is at the top. See [Live coaching](/features/live-coaching). * **Frameworks** is below it. This page is about that section. ## See which frameworks score your deals The **Frameworks** table shows **Name**, **Scope**, **Dimensions** and **Status**. * **MEDDPIC** and **SPICED** are built in. They have a lock icon and a **Built-in** badge. You cannot edit them. * Your workspace's own frameworks show below the built-in ones. Click a row to see the framework's dimensions and scoring rubric. To see the scores on a deal, open the deal and click **Qualification**. See [Deals](/features/deals#check-qualification). ## Add a framework (admins) Click **Add framework**. Choose one of these: * **From scratch**. You write the dimensions and rubrics. * **From a document**. Pick a document from your library. Doris drafts a framework from it, and you edit the draft. * **From a prebuilt framework**. Pick BANT, SPIN Selling, SCOTSMAN, CHAMP, Command of the Message, Value Selling or Sandler Selling System. Click **Add framework** on the one you want. Enter the **Framework name**. It can have up to 60 characters. Choose **Deal** for a framework that scores each deal across all its calls. Use **Deal** for qualification. Click **Add dimension** for each dimension. You can add up to 10. For each one, enter the **Acronym**, **Name**, **Description** and **Scoring rubric**. Optional. Select **Show this instead of SPICED on the deal scorecard**. Only one framework can take that place. Click **Activate framework**. Doris then scores your open deals with it. You do not need to start this yourself. ## Call scope The **Call** scope scores single calls of the call types you select. Doris does not run call-scope frameworks automatically. The table marks them **Manual trigger only**. Use **Deal** scope for frameworks you want on every deal. ## Write a good framework Doris reads your descriptions and rubrics to find evidence in calls. Write them as instructions. * Say what strong evidence sounds like in a call. * Say what weak or missing evidence looks like. * Give each score in the rubric a clear meaning. For example: "5 = clear evidence, confirmed; 3 = partial; 1 = unknown". # Deals Source: https://docs.meetdoris.com/features/deals Find the deals that need you, read a deal, and act on what is in the way. Deals is your pipeline in Doris. Click **Records** in the sidebar. Doris opens the **Deals** tab. The tabs at the top of the page are **Deals**, **Companies**, **People**, **Commitments** and **Data quality**. Use them to move between your records. ## Find the deals that need you Reps see **My deals** turned on by default. Managers and admins see the full pipeline. Click **My deals** to turn it on or off. **Sentinel** shows warnings about a deal. Hover over a warning to read the full sentence with its numbers. A dash means no warning. Click **Filter** to add a filter. The list shows open deals by default. Remove the **Status** filter to see won and lost deals too. Click a row to open the deal page. ### Sentinel warnings | Warning | What it means | | - | - | | **Going dark** | No buyer contact for 21 days or more, and the deal closes in 30 days or less | | **Stalled** | The deal is in its stage 1.5 times longer than usual for that stage | | **Slipping** | The close date moved 4 times or more, or moved a year or more in one change | | **Went backwards** | The deal moved to an earlier stage in the last 90 days | | **Past close date** | The close date passed in the last 30 days | Warnings are facts from your CRM and your calls. They are not predictions. To see only deals with warnings, filter on **Sentinel** and choose **Any warning**. ### Columns The list shows these columns: **Deal**, **Next step**, **Company**, **Sentinel**, **Amount**, **Last Contact**, **Stage**, **Status**, **Forecast**, **Close Date**, **Owner**, **Probability**, **Open commitments** and **Activity**. The list also shows one column for each active qualification framework and your workspace's custom deal fields. Click **Columns** to show, hide or move columns. ### Filters You can filter on **Pipeline**, **Stage**, **Status**, **Forecast**, **Owner**, **Amount**, **Close Date**, **Last Contact** and **Sentinel**. ## Read a deal The deal page has no tabs. Read it from top to bottom. 1. **Stage strip.** It shows the pipeline stages, the current stage and how many days the deal is in it. 2. **Deal summary.** Doris writes this summary from your calls and emails. The **Next move** band shows what to do next. Click a citation to see the call or email behind a claim. 3. **Since you looked.** These chips show what changed since you last opened the deal. 4. **Panels.** Click **Commitments**, **Risks**, **Qualification** or **Attachments** to open one panel under the summary. 5. **Activity.** It lists calls, emails, deal changes, commitments, assessments and Doris reviews. Use the filter to show one kind. The right side of the page has two more sections: * **Similar deals** lists the deals most like this one, one row each, with the result (won, lost or current stage) and the amount. The pills under a row show what the two deals share: a concern both buyers raised, or a competitor you met on both. Click a pill to read what the rep said about it on the other deal and what the buyer did next. When the other deal never answered the concern, the pill says so. * **Who is on this deal** shows the buyer's people Doris saw on calls and emails, and your own team. If the deal has a record problem, a badge shows next to the deal name. Click it to open [Data quality](/features/record-health). ## Deal risks Click **Risks** to open the **In the way** panel. It lists the blockers, the risks and the objections Doris found on the deal. Items that Doris only watches are listed under **Watching**. ## Check qualification Click **Qualification** to see the framework scores for the deal. Doris scores every deal against the built-in frameworks and any deal framework your admin adds. Click a dimension to see the evidence behind its score. To change the frameworks, see [Enablement](/features/custom-frameworks). ## Work on commitments from a deal Click **Commitments** to see the promises on this deal. For each commitment, you can: * Click the checkbox to mark it complete. * Click **Complete with ChatGPT** or **Complete with Claude**. This opens that tool with a prompt to write the deliverable. It uses the [Doris MCP server](/mcp-server), so connect it first. To see commitments across all your deals, use [Commitments](/features/commitments). ## Create a deal Click **New deal**. Enter the **Deal name**, **Company**, **Stakeholders**, **Stage**, **Close date**, **Amount** and **Currency**. Click **Create deal**. You do not need a CRM for this. Deals from your CRM sync in automatically. To see the exact moment in a call behind a signal, open the call from **Activity**. See [Meetings](/features/conversations). # Flow builder Source: https://docs.meetdoris.com/features/flow-builder Describe the automation you want, build it with Doris on the canvas, test it, and activate it. You build a flow by describing it in plain words. Doris proposes the steps. You accept, change or reject each proposal. Nothing runs until you activate the flow. ## Build a flow Open **Flows** > **All flows**. Under "Describe the flow you want to build", type what you want. For example: "When a deal moves to Negotiation, check that we have an economic buyer, and tell me if we do not." **Starts** sets the [trigger](/features/triggers). Leave it on **Let Doris choose**, or select a trigger. Admins also see **for**. **Just me** builds a personal flow. **Whole company** builds a company flow. Members always build personal flows. Select **Build flow**. The canvas opens. The conversation with Doris is on the left. The flow diagram is on the right. Doris proposes steps. Accept, change or reject each proposal. Continue until the diagram does what you want. Select **Review & test flow** in the conversation, or **Review flow** at the top of the canvas. Doris checks the flow and opens the review. Select **Test flow**. Doris runs the saved flow against real data. "No notifications will be sent and no records will be changed." Select **Activate for me** or **Activate for workspace**. The flow runs on the next matching trigger. ## The canvas The canvas has two parts: * **The conversation** is on the left. This is where you edit the flow. Tell Doris what to change. You do not drag steps or fill in forms. * **The diagram** is on the right. It shows the trigger and then each step in order. Select a step to see what it does. Doris then shows "Selected:" and the step name in the conversation. When Doris proposes a change, you have three choices: * **Apply proposal** saves the change to your draft. * **Revise proposal** lets you say what is wrong. Select **Send revision** to get a new proposal. * **Discard proposal** removes the proposal. Your draft does not change. Doris saves your draft as you work. You can close the canvas and come back later. Your unfinished builds show as drafts on **All flows**. To rename the flow, select **Rename this flow** next to its name on the canvas. ## Steps Doris builds a flow from a fixed set of steps. Each step does one job. **Find record** loads one deal, person or meeting with related data. **List records** and **Count and group records** work across many records. **Format results** turns results into a table, stat tiles or key points. **Compose text** writes from the data the flow already has. **Analyse records** looks further into your Doris data. It can only read. **Continue if** stops the flow when a condition is false. It can also send the flow down one of two named paths. **Notify person** alerts the record owner, or the owner and their managers. Other steps save an output inside Doris, write to your CRM, or read from or act on a connected account. For a schedule trigger, tell Doris the hour and the days. For example: "every weekday at 7". ## Connected accounts Some steps read from or act on an account outside Doris. Above the composer on **All flows**, a control shows how many integrations are connected. Select it to open **Flow integrations**. Select **Connect** to connect an account. Then any flow can use it. If an integration is not ready yet, select **Request sooner**. A Slack or Teams channel is different. It is where a **Notify person** step sends its alert, so you add it on that step. If you ask Doris to notify a channel that is not set up, a field above the message box asks you to "Paste the webhook URL". See [Slack & Teams notifications](/integrations/chat-notifications). ## The review The review shows "Ready to activate?" and three sections: * **Who it runs for** * **When it starts** * **What it does**, with a label for each effect the flow has "Activation applies to future runs only." A flow does not run on past events. ### Human approval A step that writes to your CRM or acts on a connected account needs approval. The review then shows "Human approval stays in control". Doris prepares the change, and a person approves it before Doris writes it. **Notify person** alerts only people in your workspace: the record owner, or the owner and their managers. ### Who can activate * Any member can activate a personal flow. * Only an admin can activate a company flow. A member sees "A workspace admin must publish this flow." ## Testing **Test flow** runs the saved version of your draft. The dialog shows "Test only": no notifications are sent and no records change. * For an event trigger, "Choose a recent example" lists recent matching events. Select one, then select **Start test**. * For a schedule trigger, Doris tests as you, with today's data. The result shows each step and what it produced. If a step failed, select the step and then **Fix this step**. Doris gets the step and its error in the conversation, and proposes a fix. ## After activation Doris shows "Flow active". If a company flow from the same template covers your personal flow, Doris shows "Flow saved" instead. The personal flow does not run while the company flow runs. To manage the flow after that, see [Flows](/features/flows). To change its steps later, open the flow and select **Customize steps**. Build the smallest version first: one trigger, two or three steps, one notification. Test it and activate it. Add more after you see it run on real deals. # Flows Source: https://docs.meetdoris.com/features/flows Find the flows that run in your workspace, check their runs, control their alerts, and roll back a version. A flow is an automation that Doris runs for you. A [trigger](/features/triggers) starts it. Then it does a sequence of steps, for example: find a deal, write a summary, and notify the deal owner. Open **Flows** in the sidebar. It has two pages: * **All flows** is where you build flows and manage them. * **Flow runs** shows each run of each flow. ## Flow scopes Every flow has one scope. The **All flows** page shows one card for each scope. Flows that run for you. Any member can build and activate one. Flows shared across your company. Only an admin can build and activate one. Doris-managed flows. The list shows if each one is on for your workspace. You cannot edit them. A card also shows your unfinished builds, for example "2 drafts". Select it to continue a draft or to discard it. ### When a company flow covers a personal flow Two flows that you build from a description never cover each other. Both run. A company flow can cover a personal flow only when both come from the same template. Then the company flow runs and the personal flow stops. Doris keeps the personal flow's settings. The personal flow shows the **Covered** status. ## Find a flow On **All flows**, select **Personal**, **Company** or **System**. Use the filters **Scope**, **Status**, **Trigger** and **Output**. **Status** is **Active** or **Disabled**. Each row shows the flow's trigger, its output, its schedule, its run count and its status: **On**, **Off**, **Covered** or **Shadow**. Select the row to open the flow's page. It shows the trigger and a diagram of the steps. ## Manage a flow The flow's page has these controls: * **Test** runs the flow safely against a recent example. Nothing is written and nobody is notified. * **Run now** starts a run at once. Only schedule flows have it. * **Customize steps** opens the flow on the canvas, so you can change it with Doris. See [Flow builder](/features/flow-builder). * The on/off switch turns the flow on or off. A system flow shows "Doris-managed" instead. You can delete a personal flow that you own. Only an admin can delete a company flow. ## Check a flow's runs Select **Flow runs** in the sidebar. Filter by flow, or by status: **Completed**, **Running**, **Failed** or **Pending**. Select a run to see each step and what it produced. ## Control your alerts Each row on **All flows** has an alerts control. Select it to open **Alerts**. * **My alerts** has three choices: **Off**, **In app** and **In app + email**. Email is sent only when the in-app alert is on. * **Team alerts** is a switch for alerts about your team's records. Only sales managers see it. * If the flow posts to Slack or Teams, the control shows "Also posts to" and the channel names. You cannot change channels here. A channel belongs to the step that sends to it. See [Slack & Teams notifications](/integrations/chat-notifications). ## Versions and rollback Each activation publishes a new version. On the flow's page, open the version control. It shows the current version, for example "v3", and the earlier versions. To roll back, select an earlier version. The dialog asks "Roll back to version N?". Select **Confirm rollback**. Future runs use that version. A run that already started keeps its version. ## Request a flow If you want a flow but do not want to build it, select **Request a flow** on **All flows**. Give a **Title** and **Details**. The Doris team scopes the request. # Live coaching Source: https://docs.meetdoris.com/features/live-coaching See which parts of your framework a call has covered, while the call is still running. Live coaching is a Chrome side panel. During a call, it shows which parts of your qualification framework the buyer has answered. Sometimes it suggests the next question to ask. The panel only watches and reports. It never speaks in the call. Nothing it shows goes to the buyer. ## Before your first call Install [Coach by Doris Labs](https://chromewebstore.google.com/detail/coach-by-doris-labs/jbacfinladccmkhbfncofjmaeajdammp) from the Chrome Web Store. The **Get the extension** button on the **Enablement** page opens the same listing. Open the side panel and sign in with your Doris account. The extension has no separate account and no settings. It uses the settings of your workspace. Select **Enablement** in the sidebar. Turn on **Coach me on my calls**. It applies only to calls you own. The line below the switches says "Coaching is on for you." or "Coaching is off for you.", and gives the reason. The panel works on Google Meet, Zoom and Microsoft Teams. To see the panel before a real call, select **Play a demo**. The demo does not need a sign-in. ## During a call Coaching runs only on a call that the Doris notetaker has joined. The notetaker joining starts the coaching session. The notetaker leaving ends it. The panel cannot start a session. To make sure the notetaker joins, see [Prepare for a call](/features/prepare-for-a-call). When the meeting starts, open the side panel from the Chrome toolbar. The panel says "Waiting for a call" until the notetaker joins. Then Doris needs a short time to read what was already said. Doris coaches only while the panel is open. If you close the panel for more than about 90 seconds, coaching stops until you open it again. When coaching runs, the panel shows: * **Coverage** — each part of the framework, marked covered or not yet, with a count and a bar * **The evidence** — point at a part to see the buyer's own words that covered it, or what it still needs * **The question** — one question at most, about the part the conversation has just opened ## What counts as covered A part is covered only when **the buyer** gives a full answer that meets the framework's standard. Doris quotes the buyer's words back to you. These do not count as coverage: * The seller talks about the topic * A question gets no answer * The buyer mentions the topic only in passing Thus a call where you explained everything can still show as not covered. Nobody on the buyer's side confirmed it. Coverage is yes or no. It is not a score, and there is no percentage. ## How often a question shows Questions are rare on purpose. You are in a conversation, not a quiz. | Rule | Value | | - | - | | Questions for each part, for each call | One | | Minimum time between two questions | 90 seconds | | Time a question stays on screen | 30 seconds | A question is a suggestion, not a task. It goes away on its own. Dismissing it only clears your screen sooner. ## Which framework the panel uses * When an admin has set coaching for the workspace, the panel uses the framework that the admin picked. You can turn coaching off, but you cannot choose a different framework. * When no admin has set it, you can still turn on **Coach me on my calls**. The panel then uses your own preferred framework. * When nobody picks a framework, the panel uses MEDDPICC. The **Change your framework** link in the panel opens the **Enablement** page. ## Turn coaching off Turn off **Coach me on my calls** on the **Enablement** page. Nothing counts against you when you turn it off. Doris still processes your calls as before. Coaching is a view of a call, not a condition of it. When an admin turns coaching off for the workspace, the setting applies to every rep. Your switch is then disabled and says "Your workspace has coaching turned off." ## For admins An admin controls coaching for the workspace in the **Live coaching** section at the top of the **Enablement** page. Turn on **Turn on for the workspace**. Coaching is then on for every rep. A rep can still turn it off. Select a framework in **Framework**. The list shows your active frameworks. It unlocks after you turn on the workspace switch. To add or activate frameworks, see [Enablement](/features/custom-frameworks). ## Troubleshooting Check the status line on the **Enablement** page. If it says "Coaching is off for you", Doris did not open a session. Doris opens a session only when coaching is on for the owner of the meeting at the time the notetaker joins. Turn coaching on, then start a new call. Doris does not open a session for a notetaker that is already in the meeting. Check that the side panel is still open. Doris stops coaching about 90 seconds after the panel closes. Open the panel again to continue. Usually the call is internal, or the buyer said little. Only what the buyer says can mark a part covered. It also happens when Doris cannot tell who is on which side. Doris treats a guest who joins from an unknown account as unknown, not as the buyer. Install the extension again from the [Chrome Web Store listing](https://chromewebstore.google.com/detail/coach-by-doris-labs/jbacfinladccmkhbfncofjmaeajdammp). A copy loaded from a folder cannot sign in. See [Which framework the panel uses](#which-framework-the-panel-uses). When the workspace has a framework, all reps use it. A team that coaches on two frameworks cannot compare its own calls. ## What live coaching does not do * It never sends anything to the buyer * It does not speak, unmute or show in the meeting. Only the notetaker you invited is in the meeting * It does not score the rep. Coverage is not a performance measure * It has no settings in the panel. All settings are on the **Enablement** page # Monitors Source: https://docs.meetdoris.com/features/monitors A standing watch on the public web, written as the headline you hope to read, delivered as a report that names the deals it touches. A monitor watches the public web for one thing you care about: a trigger event at an account, a competitor's pricing and launches, a regulator's rulings, or a signal every company in a sector has to announce. When something new appears, Doris writes a report, names the open deals it touches, and tells the people following it. Monitors are shared across your workspace. Everyone can see every monitor and its reports. The person who created a monitor, or a workspace admin, can edit, pause, resume, run or delete it. ## Before you start Monitors are turned on per workspace. If **Monitors** is not in your sidebar, ask your Doris contact to enable it. Each workspace can run 50 monitors. Doris support can raise that for a workspace. ## Create a monitor Select **Monitors** in the sidebar, then **New monitor**. Start from one of four shapes, then complete the sentence: * **Account trigger events** — news at one account that changes how you sell to it. * **Competitor watch** — pricing, packaging and launches from up to three vendors. * **Regulator watch** — one regulator, one subject. * **Market signal** — things companies in a sector must announce publicly. The sentence you build is the brief. Write it as the headline you hope to read. It is sent as written, so a vague brief gets vague results. Attaching an account from your CRM is what lets a report name the open deals it touches. A watch does not need an account: a regulator or a market signal usually has none. If other monitors already watch the same accounts, Doris shows them and offers **Follow** instead of a duplicate. **Daily** or **Weekly**. You can also run a monitor on demand from its card. ## What you get **Reports.** A check that finds something writes a report, a document in the monitor's series with what was found, what changed, and the sources. A check that finds nothing writes no report; it only updates **Last checked**. Doris drops any finding it cannot trace to a page that says it, so a quiet week means nothing verifiable appeared, not that the monitor is broken. **Accounts this touches.** When a finding is about an attached account, the report names that account's open deals, their stage and owner. This is the part you cannot get from a plain web alert. **News on the account and the deal.** A finding about an attached account also appears as **News** on that account's page and on the pages of its deals, so anyone preparing for a call sees it without opening the monitor. **Email when there is news.** The creator and every follower are told when a report is written. Turn **Email me when there is news** off on a monitor if you only want to read reports in Doris. ## Follow, pause, reassign * **Follow** any monitor to be told about its reports. Unfollow at any time. * **Pause** a monitor to stop its checks without losing its reports. **Resume** starts them again. * When someone leaves the workspace, their monitors pause. A workspace admin can reassign each one to another member, who can then resume it. ## If something looks wrong | You see | What it means | What to do | | - | - | - | | No report after several checks | Nothing new and verifiable appeared. Doris shows only findings it can trace to a page that says them. | Sharpen the brief. A named company or product finds more than a topic. | | A report names the wrong company | Two companies share a name. | Attach the account you mean; a report then names deals only at that account. | | **Accounts this touches** is empty | The finding is about a company that is not an attached account. | Attach the account, and the next report will name its deals. | | The monitor is paused and you did not pause it | Its creator's account was deactivated. | Ask a workspace admin to reassign it to you, then resume. | | You cannot create a monitor | The workspace is at its limit, or it is a demo workspace. | Ask Doris support to raise the limit. | Anything else, write to [support@meetdoris.com](mailto:support@meetdoris.com) with the monitor's name and the time of the check. # People Source: https://docs.meetdoris.com/features/people Find a contact, see their role and deals, and read what Doris knows about them. People lists the contacts in Doris. Click **Records** in the sidebar, then click the **People** tab. ## Find a person Type a name in **Search people…**. Click **Filter** to filter on **Company**, **Stage**, **Level** or **Decision Power**. The list shows **Person**, **Email**, **Title**, **Company**, **Last Contact**, **Stage**, **Level** and **Decision Power**. Click a row to open the person page. ## Read a person The page header shows what Doris knows about the person, when it has the data: * Job title and deal role * Decision power * **★ Champion**, if Doris marks the person as a champion * Sentiment * Days since the last contact * Number of meetings * Links to LinkedIn and to the CRM record The page also has these sections: * **Narrative** is on the left. Doris writes this summary of the person from your calls and emails. * **Deals** on the right lists the deals the person is on. * **Activity** on the right lists calls, emails and other events with this person. Use the filter to show one kind. ## Where people data comes from People sync from your CRM. Doris adds context from calls and emails. Your admin connects the CRM. See [HubSpot](/integrations/hubspot) or [Salesforce](/integrations/salesforce). If a person has no company, check [Data quality](/features/record-health). # Prepare for a call Source: https://docs.meetdoris.com/features/prepare-for-a-call Get a prep brief for your next meeting and make sure Doris records it. Before a call, Doris can tell you what is on record about the people and the deal. It can also record the call, so that you can review it after. ## Ask Doris for a prep brief Select **Home** in the sidebar. Select the **Prep for next meeting** shortcut below the composer. Doris sends "Prep for my next meeting" to chat. Doris answers in chat. Ask a follow-up question in the same chat if you need more. To prepare for a different meeting, type the request in the composer. Name the meeting or the company. ## Get a brief before each meeting The **Meeting Prep Brief** flow sends you a brief before each meeting. To turn it on, see [Flows](/features/flows). When the flow is on for you, Doris writes a brief 30 to 90 minutes before each external meeting on your calendar. The meeting does not need a deal. Doris then sends you a message with the title "Your meeting prep brief is ready". Select **Open your brief** to read it. The brief has seven sections: * **When / who** * **Meeting objective** * **What we know** * **Key questions to ask** * **Recommended agenda** * **Watch-outs** * **Best next step to secure** Each point in **What we know** cites its source. Doris sends no brief when it finds nothing on record about the meeting. A brief built only from the invite would tell you nothing new. After the call, the brief stays with the meeting. It shows in the **Prep** tab of the meeting page. See [Review a call](/features/conversations). ## Check your upcoming meetings Select **Meetings** in the sidebar. Select **Upcoming** in the filter bar. The list shows your own external meetings, soonest first. **Ready** means Doris has written a prep brief for that meeting. A dash means there is no brief yet. Internal meetings and personal appointments do not show in this list. ## Make sure Doris records the call Doris records a call when its notetaker joins the meeting. Your admin sets when the notetaker joins by itself. If it does not join by itself, you can send it. ### From the Upcoming list The **Bot** column shows one switch for each meeting. * **Record** means the notetaker will not join. Select it to turn recording on. * **Recording** means the notetaker will join. Select it to turn recording off. You cannot change the switch after the call starts. If Doris cannot turn recording on, it shows the reason. One reason is that your workspace is at its recording limit. ### For a meeting that is not on your calendar Select **Home** in the sidebar. Select the **Send Notetaker** shortcut below the composer. Paste a Zoom, Microsoft Teams or Google Meet link. Search for an open deal and select it. Doris then links the call to that deal. Select **Send notetaker**. The notetaker joins as a participant. The host may have to admit it from the waiting room. ## Admin setup Meeting capture and the calendar connection are admin tasks. See [Sources](/sources). # Data quality Source: https://docs.meetdoris.com/features/record-health Find record problems that make Doris less accurate, and resolve or dismiss them. Data quality lists problems Doris found in your records. A problem can be a deal with no owner, or a call not linked to a deal. Fixing these problems makes deal summaries, lists and reports more accurate. Click **Records** in the sidebar, then click the **Data quality** tab. You can also click the issue badge next to a deal name on a deal page. ## Fix a record problem The list shows open issues. Each row shows **Severity**, **Issue**, **Record**, **Type**, **Status** and **Detected**. Start with **Critical** issues. Click **Filter** to filter on **Status**, **Severity**, **Type** or **Issue**. Click **Resolve** on the row. A panel opens with the fix. It tells you whether the fix changes your CRM or only Doris. Click **Dismiss** if the issue does not need a fix. To dismiss many issues, select their rows and click **Dismiss**. ## Issue types | Issue | What the fix changes | | - | - | | **Close date in the past** | Writes the new close date to your CRM | | **Missing close date** | Writes the new close date to your CRM | | **Call not linked to a deal** | Links the call in Doris only | | **Deal not linked to a company** | Sets the company in Doris only. Also fix it in your CRM to make it stay. | | **Duplicate company** | Turns off the duplicates in Doris only | | **Deal has no owner** | Nothing in Doris. Set the owner in your CRM. Doris sees the change at the next CRM sync. | | **Contact not linked to a company** | Sets the company in Doris only. This issue is hidden by default. Choose it in the **Issue** filter to see it. | ## Fields view Data quality has a second view, **Fields**. It shows your deals against the CRM fields your workspace tracks, with values Doris proposes from calls and emails. Old links to the **Hygiene** page open this view. # Share a recording Source: https://docs.meetdoris.com/features/share-recording Send a link to a call recording, its summary and its transcript. Add a password, and revoke the link when you are done. A share link lets a person watch a call without a Doris account. Use it to send a recap to a customer, or to brief a colleague who was not on the call. ## What the link shows The link opens a page with the recording and two tabs: * **Summary** — the summary Doris wrote for the call. This tab opens first. * **Transcript** — the full transcript, with search. The **Summary** tab shows what Doris wrote about the call. Read the summary on the meeting page before you share. Do not share a call if you would not send its summary to every person who could get the link. The link does not open the deal, the CRM record or any other part of Doris. ## Create a link Select **Meetings** in the sidebar, then select the call. Select **Options** at the top of the page, then select **Share Recording**. The **Share recording** dialog opens. Type a password in **Password (optional)**. Then the link opens only with the password. Select **Create & copy link**. Doris copies the link to your clipboard. If **Share Recording** is not in the menu, the call has no recording. You cannot share it. If you set a password, send it in a different message. The link does not contain the password. ## One link for each recording A recording has one live link. When a link exists, the dialog shows that link. It does not make a second one. Thus you can see and revoke every link to the call. Sometimes a colleague creates a link while you have the dialog open. Then **Create & copy link** gives you their link, and your password is not applied. Doris shows "This recording already has a link". To change the password, use the password field on that link. ## Manage a link Select **Options**, then **Share Recording** on the call. The dialog shows each live link with: * The status: **Password protected** or **No password** * The number of views * The expiry date For each link you can: | Task | Steps | | - | - | | Copy the link | Select the copy button beside the link. | | Set or change the password | Type in **Add a password** or **New password**, then select **Save**. The link does not change. People who have it need the new password. | | Remove the password | Select **Remove password**. Then anyone with the link can open it. | | Revoke the link | Select **Revoke link**, then **Revoke**. | ## Expiry A link expires 30 days after you create it. To share the call after that, create a new link. ## Revoke a link Revoke stops the link at once, for everyone. You cannot undo it. To share the call again, create a new link and send it again. Revoke a link when a deal closes, when a person leaves the buying group, or when you do not know who has the link. ## What the viewer does 1. The viewer opens the link. 2. If the link has a password, the viewer types it in **Enter password** and selects **Access video**. 3. The viewer watches the recording and reads the **Summary** and **Transcript** tabs. A link that has expired or that you revoked shows "This shared video link has expired or is invalid." # Triggers Source: https://docs.meetdoris.com/features/triggers The events and schedules that can start a flow: what fires each one, who it runs for, and what data the flow gets. Every flow starts with one trigger. The trigger sets when the flow runs and what data the flow has when it starts. You choose it in the [flow builder](/features/flow-builder), in the **Starts** menu above the composer. There are two kinds of trigger: * **Event triggers** start a flow when something happens, for example when Doris finishes processing a meeting. * **Schedule triggers** start a flow at a set time, once a day or once a week. If you are not sure which trigger to use, leave **Starts** on **Let Doris choose**. Doris reads your description and picks a trigger. If Doris cannot find a match, it picks **Weekly schedule**. Check the trigger on the canvas before you activate the flow. ## All triggers The **Starts** menu shows these triggers, in this order. | Trigger | What fires it | Who it runs for | | - | - | - | | [After a meeting](#after-a-meeting) | Doris finishes processing a recorded meeting | The meeting's owner | | [After a deal meeting](#after-a-deal-meeting) | Doris finishes processing a meeting that is linked to a deal. Once per linked deal | The deal's owner | | [Deal stage changed](#deal-stage-changed) | A deal moves to a different stage | The deal's owner | | [Deal created](#deal-created) | A new deal comes in from your CRM, or someone creates a deal in Doris | The deal's owner | | [Deal closed](#deal-closed) | A deal is marked won or lost | The deal's owner | | [Deal updated](#deal-updated) | Your CRM tells Doris that a deal changed | The deal's owner | | [Assessment completed](#assessment-completed) | Does not fire today | None | | [Commitment created](#commitment-created) | Doris finds a commitment in a processed meeting | The deal's owner | | [Commitment overdue](#commitment-overdue) | An open commitment passes its due date | The deal's owner | | [Daily schedule](#daily-schedule) | A set hour, every day | You, or every active user | | [Weekly schedule](#weekly-schedule) | A set hour, on set days of the week | You, or every active user | | [Before an upcoming meeting](#before-an-upcoming-meeting) | An external meeting starts in 30 to 90 minutes | The users of the "Meeting Prep Brief" flow | The flows list can show a shorter name for a trigger. For example, it shows "After meeting" for **After a meeting**. ## Who a flow runs for The scope of the flow and the trigger together decide who a run is for. * A **company** flow runs on every matching event in your workspace. * A **personal** flow runs only when the event is about you. Doris finds that person in this order: the user the event names, then the deal's owner, then the meeting's owner. * If the deal or meeting has no Doris user, a personal flow does not run. A company flow still runs. Schedule triggers work in a different way. A personal schedule flow runs for you. A company schedule flow runs once for each active user in the workspace. ## Narrowing when a flow runs A trigger fires on every matching event. To run on only some events, tell Doris the condition in the builder. "Only when the deal moves to Negotiation" is an example. Doris adds a condition on the trigger's data, or adds a **Continue if** step. Custom flows have no cooldown. If the same deal fires the same trigger twice, the flow runs twice. Use a condition to keep a flow quiet. ## After a meeting * **What fires it:** Doris finishes processing a recorded meeting. Internal and external meetings both fire it. * **Who it runs for:** the Doris user who owns the meeting. * **Data the flow gets:** the meeting, its owner, its title, the deals linked to it and their count, and the call type Doris detected with its confidence. * **Caveats:** * If someone reprocesses a meeting, the trigger fires again. A flow on this trigger can run more than once for the same meeting. * A meeting with no linked deal still fires this trigger. If your flow is about a deal, use [After a deal meeting](#after-a-deal-meeting). ## After a deal meeting * **What fires it:** Doris finishes processing a meeting that has an active link to a deal. It fires once for each linked deal. * **Who it runs for:** the deal's owner in Doris. This can be a different person from the meeting's owner. * **Data the flow gets:** the meeting, the deal, the deal's owner, and whether the deal is active and whether it is closed. * **Caveats:** * A meeting with no active deal link does not fire this trigger. * Doris does not check if the meeting was internal or external. An internal meeting that is linked to a deal fires it. * Reprocessing a meeting fires it again. ## Deal stage changed * **What fires it:** a deal moves to a different stage. Your CRM must send the change to Doris, or someone must change the stage in Doris. * **Who it runs for:** the deal's owner in Doris. * **Data the flow gets:** the deal, the new stage, the previous stage, the pipeline ID, and the amount. * **Caveats:** * A scheduled CRM sync does not fire this trigger. Only a CRM webhook or a change in Doris fires it. * Salesforce does not send deal events to Doris today. Salesforce deals do not fire this trigger. ## Deal created * **What fires it:** a new deal comes in from your CRM, or someone creates a deal in Doris. * **Who it runs for:** the deal's owner in Doris. * **Data the flow gets:** the deal, its name, its amount, and its stage. * **Caveats:** * A scheduled CRM sync does not fire this trigger. Only a CRM webhook or a new deal in Doris fires it. * Salesforce deals do not fire this trigger today. * A new deal often has few fields set. If your flow needs the amount, close date or contacts, use [Deal updated](#deal-updated) or a [Daily schedule](#daily-schedule). ## Deal closed * **What fires it:** an open deal is marked won or lost. * **Who it runs for:** the deal's owner in Doris. * **Data the flow gets:** the deal, whether it was won, and its amount. * **Caveats:** * A scheduled CRM sync does not fire this trigger. Only a CRM webhook or a change in Doris fires it. * Salesforce deals do not fire this trigger today. * If you only need the outcome, use this trigger, not **Deal stage changed**. ## Deal updated * **What fires it:** your CRM sends Doris a webhook that a deal was created or changed. * **Who it runs for:** the deal's owner in Doris. * **Data the flow gets:** the deal, the action (`created` or `updated`), and the names of the changed fields. * **Caveats:** * Any deal webhook fires this trigger, also when no field you care about changed. * Only HubSpot sends the names of the changed fields. Other CRMs do not send them. * Salesforce deals do not fire this trigger today. * This trigger can fire often. Add a condition, for example on a changed field, to keep the flow quiet. ## Assessment completed This trigger does not fire today. The **Starts** menu shows it, but no part of Doris sends this event. A flow on this trigger never runs. Use a different trigger. * **What fires it:** nothing, today. * **Who it runs for:** nobody. * **Data the flow gets:** none. ## Commitment created * **What fires it:** Doris finds a commitment in a meeting it processes. * **Who it runs for:** the owner of the commitment's deal in Doris. * **Data the flow gets:** the commitment text, who owns it (rep or buyer), its due date, the deal, and the meeting it came from. * **Caveats:** * Only meetings fire this trigger. Doris does not create commitments from email. ## Commitment overdue * **What fires it:** an open commitment passes its due date. Doris checks once a day at 02:00 UTC. * **Who it runs for:** the owner of the commitment's deal in Doris. * **Data the flow gets:** the commitment text, its due date, the number of days overdue, and the deal. * **Caveats:** * Doris compares the due date with the UTC date. A commitment becomes overdue at the first check after its due date. * It fires once for each commitment. Doris then marks the commitment as overdue. ## Daily schedule * **What fires it:** a set hour, every day. The default is 08:00. Tell Doris a different hour in the builder. * **Who it runs for:** you, for a personal flow. Every active user in the workspace, for a company flow. * **Data the flow gets:** the user, their email and time zone, today's date, and an overdue cut-off date (three days before today). * **Caveats:** * The hour is each user's local time. Users in different time zones get their runs at different moments. * It runs at most once a day for each user. * On a schedule flow, the flow page has **Run now** to start a run at once. ## Weekly schedule * **What fires it:** a set hour, on set days of the week. The default is Monday at 09:00. Tell Doris different days or a different hour in the builder. * **Who it runs for:** you, for a personal flow. Every active user in the workspace, for a company flow. * **Data the flow gets:** the same data as [Daily schedule](#daily-schedule). * **Caveats:** * The hour is each user's local time. * It runs at most once a day for each user. ## Before an upcoming meeting * **What fires it:** an external meeting on a user's calendar starts in 30 to 90 minutes. Doris checks every 15 minutes. * **Who it runs for:** the people the system "Meeting Prep Brief" flow runs for. This is everyone in the workspace, or the people who turned that flow on for themselves. * **Data the flow gets:** the calendar event, its title, its start time, the user and their email, and the linked deal if there is one. * **Caveats:** * A deal link is not necessary. A meeting with a company your CRM does not know fires it. The deal is then empty. * Internal meetings do not fire it. * It fires once for each meeting and user. * A custom flow on this trigger runs only in a workspace where the system "Meeting Prep Brief" flow is on. It runs only for the users of that flow. If that flow is off, your custom flow never runs. Use the most specific trigger for your case. Use **After a deal meeting**, not **After a meeting**, when the flow is about a deal. Use **Deal closed**, not **Deal stage changed**, when you only need the outcome. # Welcome to Doris Source: https://docs.meetdoris.com/index Doris joins your CRM, meetings, emails and documents into one record for each deal. Start here. Doris is the semantic layer for your go-to-market team. It reads your CRM, your meetings, your email and your documents. It links them into one record for each deal. Doris does the machine work around each deal. It records and transcribes your sales calls. It finds the commitments that people make on a call and tracks them. It answers questions about your deals from the linked record. It runs flows that write briefs, send notifications and update your CRM. Doris does not sell for you, and it sends nothing to your buyers. Every output goes to your team. Connect your CRM, your calendars and meeting capture. Then start from your first recorded call. ## If you are a rep Use Doris every day to prepare for calls, review calls and keep track of promises. Ask Doris a question, prepare for your next meeting, or send the notetaker to a call. Read the transcript and summary of each recorded call. See the pipeline and the calls, emails and commitments for each deal. See each promise from a call, who owns it and when it is due. ## If you are an admin Connect the systems that Doris reads, and decide which meetings Doris records. Connect your CRM, Microsoft 365, Gong and document sources for the workspace. Make Doris do repeatable work when a meeting ends, a deal changes or a schedule runs. ## If you are a developer Read your deal records from your own tools and AI assistants. Connect Claude, ChatGPT, Cursor or another MCP client to your Doris records. Connect an MCP client to a read-only demo pipeline. You do not need an account. Need help? Send an email to [support@meetdoris.com](mailto:support@meetdoris.com). # Slack & Teams notifications Source: https://docs.meetdoris.com/integrations/chat-notifications Get a webhook URL from Microsoft Teams or Slack so flows can post alerts into a channel. A flow's **notify** step can post into a Slack or Teams channel alongside the in-app alert and the email. Doris posts through an incoming webhook, so there is nothing to install and no admin consent to request — you create the webhook in Slack or Teams, they hand you a URL, and you paste it into Doris. You need the URL before you can add the channel. This page is how to get it. Doris only ever posts into your own team's channels. No flow sends anything to your buyer. ## Microsoft Teams Teams webhooks come from **Workflows**, Microsoft's replacement for the retired Office 365 connectors. You create one from the channel you want Doris to post into. In Teams, find the channel you want the alerts in. Hover its name in the sidebar, choose the **…** menu, then **Workflows**. You can also get there from the channel itself: **…** in the top-right, then **Workflows**. Search the template list for `webhook` and choose **Post to a channel when a webhook request is received**. This is the template that matters. Others post plain text and will render Doris alerts as raw data — the one above understands the card Doris sends, so you get the title, the labelled facts and the button. For a group chat rather than a channel, choose **Post to a chat when a webhook request is received** instead. Teams shows which account the workflow will run as. Confirm it and continue. Whoever creates the workflow owns it. If they leave the company and their account is removed, the webhook stops working — so a shared or team-owned account is worth considering for a channel the whole team relies on. Select the team and the channel the messages should land in, then **Add workflow**. Teams shows the webhook URL once, with a copy button. Copy it now — you cannot see it again later, and getting a new one means creating the workflow again. It looks like `https://.environment.api.powerplatform.com/powerautomate/automations/direct/...`. ## Slack Go to [Slack's app directory](https://api.slack.com/apps) and either create an app for your workspace or open an existing one. Under **Features**, open **Incoming Webhooks** and switch them on. Choose **Add New Webhook to Workspace**, pick the channel, and allow it. Copy the URL Slack shows. It starts `https://hooks.slack.com/services/`. ## Add the channel in Doris A channel lives on the step that posts to it. There is no separate list to keep — open the flow, open its notify step, and the channel is there. On the flow, select the step that does the notifying. Its panel shows the chat channel it posts to. While you are building a flow by asking, Doris offers to add a channel in the conversation as soon as the flow has a notify step. Give it a name that says which room it is — `#revops`, `Deal alerts`. Then paste the webhook URL. Doris works out whether it is Slack or Teams from the URL itself, so there is nothing to choose. Press **Test** and go and look at the channel. A webhook URL says nothing about which room it points at, so this is the only way to be sure it is the one you meant. Test posts only to the channel you pressed it on. ## Choosing where a flow posts Each notify step posts to the one channel it names, and to nowhere else — pipeline slips to `#revops`, onboarding to `#csm` — so add as many as you need. A step with no channel sends no chat message; its alert still reaches the person in Doris and by email. The step's panel is also where you rename or remove a channel. When a delivery fails, the panel shows the last error under the channel. The name matters: Doris never shows the webhook URL again, so the name is the only thing people see of that channel. ## If nothing arrives Doris accepts webhook URLs on Slack's and Microsoft's own hosts and nothing else — pasting any other address is refused. Check you copied the whole URL, including everything after the `?`. Teams accepts the request before it posts anything, so a workflow that was built from the wrong template accepts Doris's message and then does nothing useful with it. Open **Workflows** on the channel, check the run history, and confirm the workflow came from **Post to a channel when a webhook request is received**. Open the flow's notify step. A failing channel shows its last error there. The usual causes are the workflow being deleted in Teams, the Slack app being removed from the channel, or the account that created the Teams workflow being deactivated. The step has no channel named. Open the notify step on the flow and pick one — a step posts only to the channel it names, so adding a channel to the workspace does not by itself make an existing step use it. # Gong Source: https://docs.meetdoris.com/integrations/gong Connect Gong and make it the primary meeting capture source, so Doris uses Gong calls instead of sending its notetaker. Connect Gong if your team already records calls in Gong. Doris then brings in verified Gong calls with their transcripts. The calls appear in [Meetings](/features/conversations) and link to deals, companies and people. Doris uses one primary source for meeting transcripts. Doris Notetaker is the default. When you make Gong primary, Doris stops sending its notetaker. ## Before you start You need: * A Doris role that can configure meeting capture. * Gong **Admin Center** access, with permission to create automation rules. * Permission in Gong to create an API access key and secret. * A connected CRM in Doris. Connect it first, so Doris can link calls to the right deals. ## 1. Open the Gong setup Go to **Settings > Workspace > Integrations**. Then do one of these: * In the **Meeting capture** family, select **Set up Gong** on the Gong row. * Select **Configure meeting capture**, then **Set up Gong** on the Gong row. The **Connect Gong** dialog opens. It shows the webhook URL for your workspace. ## 2. Create the Gong webhook rule In the dialog, select **Copy Gong webhook URL**. In Gong, open **Admin Center > Settings > Ecosystem > Automation Rules**. Create a webhook rule with the **New Call** trigger. Paste the Doris webhook URL. Gong shows a **Public Key** for the rule. Copy it. Doris uses it to check that each webhook came from Gong. ## 3. Create the Gong API key In Gong, go to **Company Settings > API**. Select **Get API Key**. Copy the **Access Key** and the **Access Key Secret**. Gong shows the secret once only. ## 4. Connect in Doris In the **Connect Gong** dialog, paste the **Public key**, **Access key** and **Access key secret**. Select **Connect Gong**. Doris checks the API credentials with Gong. If the check fails, Doris shows an error and saves nothing. Connecting Gong does not make it primary. Doris Notetaker stays primary until you complete the next step. ## 5. Make Gong primary In **Integrations**, select **Configure meeting capture**. On the Gong row, select **Make primary**. The row then shows **Doris bots blocked**. While Gong is primary, Doris Notetaker does not join meetings. To go back, select **Make primary** on the **Doris Notetaker** row. Doris keeps the Gong calls it already brought in. ## Which calls Doris brings in Doris ignores a Gong call in these cases: * No internal participant on the call matches a Doris user by email. * Salesforce is connected with **Selected CRM owners**, and no internal participant is a selected owner. If Salesforce uses **Selected CRM owners** and you select nobody, Doris ignores every Gong call. To bring in calls from all reps, choose **All CRM owners**. See [Salesforce](/integrations/salesforce#4-choose-what-doris-imports). The owner filter uses the Salesforce user IDs that Gong sends. It does not apply to HubSpot. ## Troubleshooting Check that Gong is primary on the **Meeting capture** page. Check that the Gong rule uses the **New Call** trigger and the exact Doris webhook URL. Then check the owner filter above. Doris could not verify the access key and secret with Gong. Create a new API key in Gong and paste both values again. The public key must be at least 20 characters. Gong must finish processing the recording first. Check that the API key can read call transcripts. This is expected while Gong is primary. Make Doris Notetaker primary again if you want it back. # Google Calendar Source: https://docs.meetdoris.com/integrations/google Each person connects their own Google Calendar so Doris can see their meetings. Google Calendar is a personal connection. Each person connects their own calendar. There is no workspace-wide Google connection. ## What an admin does An admin does not connect Google Calendar for the team. Tell each person to connect it in **Settings > You > Connections**. For a Microsoft calendar that the workspace manages, see [Microsoft 365 / Outlook](/integrations/outlook). ## Connect your Google Calendar Go to **Settings > You > Connections**. The Google row says "Connect your Google Calendar so Doris can see your meetings". Select **Connect**. Sign in with the Google account that holds your work calendar. Allow Doris to read your calendar. Google sends you back to **Connections**. If you use more than one Google account, choose the one with your sales meetings. ## What Doris does with it Doris asks for read-only calendar access (`calendar.readonly`). Doris uses your calendar to: * Find your upcoming meetings, so it can prepare deal context. * Match meeting attendees to people and companies in your CRM. * Decide which meetings Doris Notetaker joins, under your workspace's join policy. See [Meeting capture](/sources#meeting-capture). Doris does not create, change or delete calendar events. Google Calendar does not record meetings. Doris Notetaker or [Gong](/integrations/gong) records them. ## Disconnect In **Settings > You > Connections**, select **Disconnect** on the Google row. # HubSpot Source: https://docs.meetdoris.com/integrations/hubspot Connect HubSpot as the workspace CRM, choose what Doris imports, and start the initial import. Connect HubSpot so Doris can import companies, contacts, deals, owners and pipelines. A workspace admin does this once for the whole workspace. ## Before you start You need: * A Doris role that can connect integrations. See [People & access](/settings/people-and-access). * A HubSpot user who can install connected apps in the portal. A super admin is best. * No other CRM connected in Doris. Doris uses one CRM for each workspace. You do not create a HubSpot app. Doris uses its own HubSpot app. Doris can import only the records and properties that the authorizing HubSpot user can see. Use a user who can see all the pipelines you need. ## HubSpot scopes HubSpot asks the user to approve these scopes: | Scope | Why Doris needs it | | - | - | | `oauth` | Complete the HubSpot install | | `crm.objects.companies.read` | Read company records | | `crm.objects.companies.write` | Write company updates when enabled | | `crm.objects.contacts.read` | Read contact records | | `crm.objects.contacts.write` | Write contact updates when enabled | | `crm.objects.deals.read` | Read deal records | | `crm.objects.deals.write` | Write deal updates when enabled | | `crm.objects.owners.read` | Read HubSpot owners | | `crm.objects.products.read` | Read product records | | `crm.schemas.contacts.read` | Read contact property metadata | | `crm.schemas.contacts.write` | Keep Doris contact properties up to date | | `crm.schemas.deals.read` | Read deal property metadata | HubSpot can also show `crm.schemas.companies.read` as optional. Approve it so Doris can read company property metadata. ## 1. Connect HubSpot Go to **Settings > Workspace > Integrations**. Select **Add integration**. In **CRM**, select **Connect** next to **HubSpot**. In a new workspace, the provider list shows on the page. Select **Connect** there. Sign in to HubSpot. Choose the correct portal. Approve the scopes. HubSpot sends you back to Doris. The banner says **HubSpot connected**. Select **Finish setup**. Authorization does not import CRM data. Doris imports nothing until you finish the setup below. ## 2. Choose what Doris imports The setup page is named **Set up HubSpot**. It has five steps: **Authority**, **Pipelines**, **Record owners**, **Review** and **Initial import**. Choose the pipelines to import. Doris imports only records in the pipelines you select. Choose **All CRM owners** or **Selected CRM owners**. With selected owners, Doris processes only records those owners own. Select **Save configuration**. If you change the owner choice, Doris asks you to confirm it. In **Review and start initial import**, check the summary. Select **Activate and start import**. The first import can take a few minutes for a large portal. ### Deal fields Doris always imports amount, close date, stage, owner and pipeline. To import more deal fields, select **Choose fields** after setup. You can also use the **Fields** tab on the connection. ### Change the scope later Open **Integrations**, select **Manage** on the HubSpot row, then open **Configuration**. If you limit the owners, Doris stops processing records owned by other people. Doris does not delete records it already imported. ## What syncs | HubSpot | Doris | | - | - | | Companies | Companies | | Contacts | People | | Deals | Deals | | Owners | Record owners | | Pipelines and stages | Deal stages and pipelines | | Products | Products | Doris syncs HubSpot every night at 02:00 UTC. Doris writes back to HubSpot only when a write is turned on for your workspace. The write scopes above allow those updates. ## Troubleshooting Use a HubSpot super admin. Some portals need admin approval before a user can install a new app. Open the HubSpot connection, then the **Connection** tab. Select **Disconnect**. Connect again and choose the correct portal. Check the pipelines and record owners on the **Configuration** tab. Then check that the authorizing HubSpot user can see those records. Doris uses one CRM for each workspace. Disconnect the current CRM before you connect HubSpot. # Microsoft 365 / Outlook Source: https://docs.meetdoris.com/integrations/outlook Connect Microsoft Calendar and Microsoft Email for the workspace with admin consent, then choose who they cover. Microsoft 365 gives Doris two capabilities: * **Microsoft Calendar** finds meetings and gives Doris Notetaker its schedule. * **Microsoft Email** brings deal email threads into Doris. A workspace admin connects each one once, with Microsoft admin consent. The admin then chooses which people each one covers. People can also connect their own Outlook calendar. ## Before you start You need: * A Doris role that can connect integrations. See [People & access](/settings/people-and-access). * A Microsoft 365 admin who can grant admin consent for the tenant. This is often a Global Administrator. * A Microsoft 365 business or enterprise tenant. ## Connect for the workspace Go to **Settings > Workspace > Integrations**. Select **Add integration**. In **Calendar & Email**, select **Connect** next to **Microsoft Calendar** or **Microsoft Email**. Microsoft opens. Sign in as the Microsoft 365 admin and accept. Microsoft sends you back to **Integrations**. The page shows one **Microsoft 365** row with the module you connected. Repeat for the second module if you need it. Doris uses the consent you already gave. It adds the module to the same **Microsoft 365** row. Microsoft can show the full Doris permission list during consent. Doris turns on only the module you chose. Doris reads with `Calendars.Read` and `Mail.Read`. It does not send email or change calendar events. ## Choose who is covered After you connect, check who the connection covers. Doris reads calendar or email only for covered people. On the **Microsoft 365** row, select **Manage**. Open the **Coverage** tab. If nobody is covered, select **Cover everyone**. Otherwise select **Edit coverage**. Set **All members defaults** for Calendar and Email. Add **Group policies** or member exceptions where needed. Select **Save coverage**. The coverage modes are **Managed**, **Personal required**, **Optional** and **Excluded**. See [Coverage](/sources#coverage). The **Microsoft 365** row on **Integrations** shows "N of M people covered · K need attention". Open **Coverage** to see who needs attention and why. ## What people see In **Settings > You > Connections**, a covered person sees the capability under **Handled by your workspace**. For example, "Calendar — handled by your workspace". That person does not need to connect anything. If you set a person to **Personal required**, that person sees the Microsoft row under **Needs you**. They select **Connect** and sign in to their own Microsoft account. ## Personal Outlook calendar Without admin consent, each person can connect their own Outlook calendar: 1. Go to **Settings > You > Connections**. 2. On the Microsoft row, select **Connect**. 3. Sign in with the work Microsoft account. A personal connection covers the calendar only. Email needs the workspace **Microsoft Email** module. ## What Doris does with it * **Calendar**: finds upcoming meetings, matches attendees to CRM people and companies, and tells Doris Notetaker which meetings to join. * **Email**: brings deal email threads onto [deal pages](/features/deals) and company and people timelines. ## Troubleshooting Open **Integrations needing attention** at the top of **Integrations**. Select the repair link. If consent was withdrawn in Microsoft, a Microsoft 365 admin must grant it again. Open **Coverage** on the Microsoft 365 connection. Check that the person is covered for Calendar and that their state is active. The account that signs in must be able to grant admin consent for the whole tenant. Ask your Microsoft 365 Global Administrator. # Salesforce Source: https://docs.meetdoris.com/integrations/salesforce Create a Salesforce External Client App, connect it to Doris, and start the initial import. Connect Salesforce so Doris can import accounts, contacts, opportunities, owners and stages. A workspace admin does this once for the whole workspace. Salesforce needs an app that your organization owns. You create an External Client App in Salesforce, then give its key and secret to Doris. ## Before you start You need: * A Doris role that can connect integrations. See [People & access](/settings/people-and-access). * A Salesforce admin who can create an External Client App. * A Salesforce user to authorize the connection. Use an admin or a dedicated integration user. * No other CRM connected in Doris. Doris uses one CRM for each workspace. The authorizing Salesforce user needs: * API access * Read access to **User**, **Account**, **Contact** and **Opportunity**, and to opportunity stages and owners * Edit access to **Account**, **Contact** and **Opportunity** if Doris will update CRM fields * Create access to **Task** if Doris will write notes back to Salesforce A dedicated integration user is better than a rep's account. The connection keeps working when people change roles. ## 1. Start the connection in Doris Go to **Settings > Workspace > Integrations**. Select **Add integration**. In **CRM**, select **Connect** next to **Salesforce**. The **Connect Salesforce** dialog opens. In **Salesforce environment**, choose **Production** (`login.salesforce.com`) or **Sandbox** (`test.salesforce.com`). The dialog shows the callback URL. Select the copy button. You need it in Salesforce. In production it is: ```text theme={null} https://server.meetdoris.com/api/v1/crm/salesforce/callback ``` Keep the dialog open. ## 2. Create the External Client App in Salesforce In Salesforce **Setup**, open **Apps > External Client Apps > External Client App Manager**. Create a new External Client App. Turn on the OAuth settings. Paste the callback URL from Doris. It must match exactly. Add these scopes: | Scope | Why Doris needs it | | - | - | | `api` | Read and write CRM records through the Salesforce API | | `refresh_token` / `offline_access` | Keep the connection active without a new sign-in | | `id` | Identify the org and user that authorized the connection | Turn on the Web Server Flow. Require PKCE with the S256 challenge method. Save the app. Copy its **Consumer Key** and **Consumer Secret**. ## 3. Authorize in Doris In the **Connect Salesforce** dialog, paste the **Consumer Key** and **Consumer Secret**. Doris encrypts the secret and never shows it again. Select **Save and authorize**. Salesforce opens. Sign in as the integration user and approve access. Salesforce sends you back to Doris. The banner says **Salesforce connected**. Select **Finish setup**. Authorization does not import CRM data. Doris imports nothing until you finish the setup below. ## 4. Choose what Doris imports The setup page is named **Set up Salesforce**. It has five steps: **Authority**, **Pipelines**, **Record owners**, **Review** and **Initial import**. Choose the pipelines to import. Doris imports only records in the pipelines you select. Choose **All CRM owners** or **Selected CRM owners**. With selected owners, Doris processes only records those owners own. Select **Save configuration**. If you change the owner choice, Doris asks you to confirm it. In **Review and start initial import**, check the summary. Select **Activate and start import**. Doris always imports amount, close date, stage, owner and pipeline. To import more deal fields, select **Choose fields** after setup, or open the **Fields** tab on the connection. The record owners you select also filter [Gong](/integrations/gong) calls. If you choose **Selected CRM owners** and select nobody, Doris ignores every Gong call. ## What syncs | Salesforce | Doris | | - | - | | Accounts | Companies | | Contacts | People | | Opportunities | Deals | | Users | Record owners | | Opportunity stages | Deal stages and pipelines | Doris checks Salesforce for changes every 15 minutes. Doris writes notes back to Salesforce as **Task** records when that write is turned on for your workspace. ## Troubleshooting The callback URL in Salesforce must match the one in the Doris dialog exactly. Check for a missing `https` or an extra slash. Start again and choose **Sandbox** in **Salesforce environment**. Production and sandbox use different sign-in domains. Open the Salesforce connection, then the **Connection** tab. Select **Disconnect**. Connect again with a user from the correct org. Doris checks the org identity during authorization. Check the pipelines and record owners on the **Configuration** tab. Then check the integration user's object permissions and field-level security. Doris uses one CRM for each workspace. Disconnect the current CRM before you connect Salesforce. # Doris in Microsoft Teams Source: https://docs.meetdoris.com/integrations/teams-bot Ask Doris about a deal from a Teams chat or channel. Doris turns it on for each workspace. Doris answers questions in Microsoft Teams. Send it a direct message, or @mention it in a channel. It replies from the same deal data the app uses, limited to what you can see in Doris. It never posts on its own. It replies only to a message that reaches it. Doris in Teams is off by default. Doris turns it on for each workspace during onboarding. Ask your Doris contact to turn it on. Until then, the Teams card does not appear in Doris, and the bot does not answer anyone in your workspace. ## Before you install Two people are usually involved: * A **Teams administrator** allows the app in your Microsoft tenant. * Each **user** connects their Microsoft account in Doris, so the bot knows who is asking. Doris identifies you by the Microsoft account connected to Doris. It does not use your Teams display name. Doris must see both your Microsoft tenant and your directory user ID on that connection. ### Check that Doris will recognise you Go to **Settings > You > Connections**. When Teams is on for your workspace, the **Doris in Microsoft Teams** card shows one of these: | Card message | What to do | | - | - | | Doris will recognise you in Teams. | Nothing | | **Connect Microsoft 365 first** | Connect the same work account that you use in Teams | | **Reconnect Microsoft 365** | Reconnect your Microsoft account. Doris then records your directory identity | | **No workspace membership** | Ask a Doris admin to add you to the workspace | ## Install the app On the Teams card, select **Download app package**. Or download [doris-teams-app.zip](https://app.meetdoris.com/downloads/doris-teams-app.zip). It holds the app manifest and icons. It has no credentials, so you can send it to your Teams administrator. Your Teams administrator must allow custom app upload in the Teams app setup policy. If the upload option is missing, this policy is the cause. In Teams, go to **Apps > Manage your apps > Upload an app > Upload a custom app**. Choose the zip. The Doris bot is registered in one Microsoft tenant, because Microsoft no longer accepts new multi-tenant bots. Doris has not yet proven the install in every customer tenant. Talk to your Doris contact before you roll it out. ## Where you can use it | Where | How to reach it | What Doris receives | | - | - | - | | Direct message | Send a message | Every message you send it | | Group chat | @mention it | Only messages that @mention it | | Channel | @mention it | Only messages that @mention it | In a channel or group chat, Doris receives only messages that @mention it. A question without the @mention gets no reply. ## Ask it something Ask in plain language. Doris answers from the calls, emails, documents and CRM fields behind the deal. The app suggests three commands: **Deal status**, **Call recap** and **Pipeline check**. * *What happened on my last call?* * *Which deals went quiet this week?* * *Where is the Acme deal and what is at risk?* Each answer ends with a **Sources** list. The links open the meetings and deals in Doris. ### Follow-up questions Doris remembers the recent turns of your conversation. A follow-up like *what about the other one?* works. Each person's history is their own. Two people in the same channel do not see each other's earlier questions. Each answer uses only what that person can see in Doris. Say **clear** to start a new thread. The earlier conversation stays in Doris. ### Report a wrong answer React to the reply with 👍 or 👎 in Teams. Doris records the reaction against the answer. Each message also has a request ID. Open the conversation in Doris, hover the message, and copy the ID. Send it with your bug report. ## Find a Teams conversation later Teams conversations appear in your Doris chat list with the Teams icon. They show as "Held in Microsoft Teams". ## What Doris does not do in Teams * It does not start a conversation. Every reply follows a message to it. * It does not contact your buyer. * It does not change data. In Teams, Doris can only read. Make changes in the app. * It does not read your channel. Only messages that @mention it reach Doris. ## Troubleshooting Teams is not on for your workspace. Ask your Doris contact. Check that the message @mentions Doris. Doris receives nothing else in a channel or group chat. Open **Settings > You > Connections** and read the Teams card. Connect or reconnect the same work account you use in Teams. A personal account or an account in a different tenant does not match. Teams limits message size. Doris shortens a long answer and links to the full answer in Doris. ## Update the app Doris updates answers and behaviour on its servers. You do nothing. When the package changes, for example a new icon or command list, download the zip again. Upload it the same way. Teams updates the existing app. The link always serves the current package. # MCP Server Source: https://docs.meetdoris.com/mcp-server Connect an MCP client, such as Claude, ChatGPT or Cursor, to the deals, meetings and commitments in your Doris workspace. The Doris MCP server gives an AI tool access to the ontology of your workspace. The tool reads deals, accounts, people, meetings and commitments. It can also make a small set of writes. | | | | - | - | | Endpoint | `https://mcp.meetdoris.com/mcp` | | Transport | Streamable HTTP | | Authentication | OAuth 2.1 with PKCE and dynamic client registration | | Scope | `ontology:read` | When you connect for the first time, your MCP client opens a browser window. Sign in with your Doris login. The client then gets a token for your user in your workspace. To try the tools without an account, use the [demo sandbox](/sandbox). ## Connect a client Menu names in other apps can change. Any client that supports Streamable HTTP and OAuth can use the endpoint. ```bash theme={null} claude mcp add --transport http doris https://mcp.meetdoris.com/mcp ``` Open **Settings > Connectors > Add Connector**. Paste the endpoint URL and sign in. You can also add the server to `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json theme={null} { "mcpServers": { "doris": { "command": "npx", "args": ["mcp-remote", "https://mcp.meetdoris.com/mcp"] } } } ``` You need a Pro, Team or Enterprise plan with Developer Mode on. 1. Open **Settings > Apps & Connectors**. 2. Click **Add Connector**. 3. Enter the endpoint URL and sign in. ```bash theme={null} codex mcp add doris https://mcp.meetdoris.com/mcp ``` Open **Settings > Features > MCP > Add New MCP Server**. Select **Streamable HTTP** and enter the endpoint URL. Or add this to your MCP configuration: ```json theme={null} { "mcpServers": { "doris": { "url": "https://mcp.meetdoris.com/mcp" } } } ``` Add this to `.vscode/mcp.json`: ```json theme={null} { "servers": { "doris": { "type": "http", "url": "https://mcp.meetdoris.com/mcp" } } } ``` ## Tools The server has 12 tools. Eight tools read. Four tools write. | Tool | Kind | What it does | | - | - | - | | `ontology_types` | read | Lists the types, or returns the schema of one type | | `ontology_resolve` | read | Returns one object, with optional expand keys | | `ontology_list` | read | Returns a page of objects of one type | | `ontology_search` | read | Searches across types | | `ontology_batch` | read | Returns several objects in one call | | `ontology_traverse` | read | Returns the objects linked to one object | | `ontology_aggregate` | read | Counts objects or computes measures, grouped | | `search_transcripts` | read | Searches what people said in meeting transcripts | | `ontology_update` | write | Writes typed fields on one object | | `ontology_action` | write | Runs a named action on one object | | `create_composition` | write | Creates a document that you own | | `edit_composition` | write | Edits the title or text of a document | The same data is available through the [Ontology API](/api-reference). The API and the MCP server apply the same tenant scope. ### ontology\_types | Parameter | Type | Required | Description | | - | - | - | - | | `type_name` | string | No | The type to describe. | Without `type_name`, the tool returns a directory: each type name and its expand keys. With `type_name`, it returns the full schema. The schema includes properties, expand keys, writable fields, actions with their `params_schema`, measures and dataset capabilities. ### ontology\_resolve | Parameter | Type | Required | Description | | - | - | - | - | | `type_name` | string | Yes | The type, for example `deal`. | | `object_id` | string | Yes | The object ID. | | `expand` | string\[] | No | Expand keys to add related data. | | `expand_params` | object | No | Options for each expand key, for example `{"transcript": {"query": "pricing", "limit": 5}}`. | Some expand keys on `deal` are `stakeholders`, `commitments`, `meetings`, `risks`, `next_step` and `similar_deals`. Call `ontology_types` with `type_name="deal"` for the full list. For `type_name="teammate"`, the ID `me` returns your own user. ### ontology\_list | Parameter | Type | Required | Description | | - | - | - | - | | `object_type` | string | Yes | The type to list. | | `filters` | object | No | Field filters, for example `{"stage": "Negotiation"}`. | | `sort` | string | No | Sort field and direction, for example `amount:desc`. | | `expand` | string\[] | No | Expand keys for each result. | | `limit` | integer | No | 1 to 100. The default is 25. | | `offset` | integer | No | The number of results to skip. | | `mine` | boolean | No | Return only objects that you own. | | `include_links` | boolean | No | Add relationship counts to each result. | | `changes_since` | string | No | An ISO-8601 time. Return only objects whose indexed content changed after it. | | `cursor` | string | No | The `next_cursor` of the previous page. When you send it, the server ignores `offset`. | A `limit` above 100 returns `validation_error`. ### ontology\_search | Parameter | Type | Required | Description | | - | - | - | - | | `query` | string | No | Search text, 500 characters at most. Supports `"quoted phrases"`, `AND`, and `-word` to exclude a word. | | `types` | string\[] | No | Limit the search to these types. | | `filters` | object | No | Field filters. | | `sort` | string | No | Sort field and direction. | | `limit` | integer | No | 1 to 100. The default is 25. | | `offset` | integer | No | The number of results to skip. | | `mine` | boolean | No | Return only objects that you own. | | `search_fields` | string\[] | No | Search only these zones: `title`, `content` or `body`. | | `include_links` | boolean | No | Add relationship counts to each result. | | `changes_since` | string | No | An ISO-8601 time. Return only objects whose indexed content changed after it. | | `cursor` | string | No | The `next_cursor` of the previous page. Works only with `sort="updated_at"`. | ### ontology\_batch | Parameter | Type | Required | Description | | - | - | - | - | | `refs` | object\[] | Yes | A list of `{"type": "...", "id": "..."}` references. | The result has `results` and `errors`, both keyed by `type:id`. One failed reference does not stop the others. ### ontology\_traverse | Parameter | Type | Required | Description | | - | - | - | - | | `source_type` | string | Yes | The type of the start object. | | `source_id` | string | Yes | The ID of the start object. | | `link_type` | string | No | Return only this link type. | | `target_type` | string | No | Return only linked objects of this type. | | `limit` | integer | No | The default is 50. Values above 200 become 200. | | `link_filter` | object | No | Filter on link properties, for example `{"role": "decision_maker"}`. | ### ontology\_aggregate | Parameter | Type | Required | Description | | - | - | - | - | | `object_type` | string | Yes | The type to aggregate, for example `deal`. | | `group_by` | string | No | A declared dimension, for example `stage`. | | `metrics` | string\[] | No | Declared measure names, for example `deal_count` or `pipeline_amount`. Without this, the tool uses the count measure of the type. | | `filters` | object | No | Field filters, applied before the aggregation. | | `mine` | boolean | No | Aggregate only objects that you own. | | `time_bucket` | string | No | `week`, `month` or `quarter`. | | `time_field` | string | No | The date property to bucket on. You must set it when you set `time_bucket`. | `ontology_types` lists the measures and dimensions of each type. ### search\_transcripts | Parameter | Type | Required | Description | | - | - | - | - | | `query` | string | Yes | The words to find, 500 characters at most. The search matches words and meaning. | | `date_from` | string | No | ISO-8601 lower limit on the meeting start time. | | `date_to` | string | No | ISO-8601 upper limit on the meeting start time. | | `mine` | boolean | No | Search only your own meetings. The default is `true`. | | `deal_id` | string | No | Search only meetings linked to this deal. | | `meeting_id` | string | No | Search only this meeting. | | `meeting_ids` | string\[] | No | Search only these meetings. | | `speaker` | string | No | Return only turns whose speaker name contains this text. | | `limit` | integer | No | The number of turns. The default is 25. The server can reduce it. | The result has `transcript_turns` and `meetings_matched`. Each turn has its meeting ID, start time in milliseconds, speaker and snippet. If a search with `mine=true` finds nothing, the server searches the whole workspace. It then sets `widened_beyond_mine` to `true`. ## Writes MCP tokens have only the `ontology:read` scope. There is no write scope. The server authorizes each write by its type and action. Every MCP call counts as an agent call, not a person's call. Some actions accept only a person's call. From MCP, these actions return an error and change nothing. | Type | Write | From MCP | | - | - | - | | `commitment` | `ontology_update` with `description`, `owner_type` (`rep` or `buyer`), `due_date` (`YYYY-MM-DD`) | Yes | | `commitment` | `reopen` | Yes | | `commitment` | `complete` | No. Returns `evidence_required`. | | `commitment` | `cancel`, `wait_on_buyer`, `resume`, `reject_evidence` | No. Returns `human_required`. | | `composition` | `ontology_update` with `title`, `body` | Yes | | `composition` | `restore` | Yes | | `deal_concern` | `mark_handled`, `reopen` | No | | `calendar_event` | `ontology_update` with `join_requested` | No | `ontology_types` shows the current actions of each type and their `params_schema`. It does not list `update`. Use `ontology_update` for field writes, not `ontology_action`. ### ontology\_update | Parameter | Type | Required | Description | | - | - | - | - | | `type_name` | string | Yes | The type. | | `object_id` | string | Yes | The object ID. | | `patch` | object | Yes | A map of field to value. Only the `writable_fields` of the type are accepted. | A field that is not in `writable_fields` returns `invalid_request`. Nothing is written. ### ontology\_action | Parameter | Type | Required | Description | | - | - | - | - | | `type_name` | string | Yes | The type. | | `object_id` | string | Yes | The object ID. | | `action` | string | Yes | The action name, for example `reopen`. | | `params` | object | No | Parameters that match the `params_schema` of the action. | The `commitment` actions take two optional parameters: `operation_id` (a UUID) and `reason` (1 to 4,000 characters). `reject_evidence` needs `occurrence_id` and `reason`. Send the same `operation_id` again to repeat a call safely. An action that can reach a buyer returns `forbidden` from MCP. Only a person can start it. ### create\_composition | Parameter | Type | Required | Description | | - | - | - | - | | `title` | string | Yes | The document title. | | `sections` | object\[] | Yes | Ordered sections. Each section is `{key, heading, blocks, sources?}`. | | `deal_id` | string | No | Attach the document to this deal. | The document belongs to you. The result has `composition_id` and a `link` to the document in Doris. ### edit\_composition | Parameter | Type | Required | Description | | - | - | - | - | | `composition_id` | string | Yes | The document to edit. | | `title` | string | No | A new title. | | `body` | object | No | The full new body, `{"sections": [...]}`. | Send `title`, `body` or both. The body must keep the same sections, in the same order, with the same keys. You can change prose, callout and key-point blocks. The server keeps all other blocks, such as tables and charts. To get the current body, call `ontology_resolve` with `type_name="composition"` and `expand=["body"]`. ## Privacy The MCP server always uses the `masked` [privacy level](/privacy). You cannot change it. | Tool | Masked | | - | - | | `ontology_resolve`, `ontology_list`, `ontology_search`, `ontology_batch`, `ontology_traverse` | Yes | | `ontology_aggregate` | Returns counts and measures. It does not apply a privacy level. | | `search_transcripts` | **No.** Speaker names and transcript text come back as recorded. | At `masked`, `owner_name` and `owner_email` stay visible on deals only. On other types, the server masks them. Internal calls follow the same rule as in the app. A member sees an internal meeting only if they were on it. An admin sees all meetings. ## Rate limits * **10,000 calls a day** for each workspace. The MCP server and the Ontology API share this quota. * MCP has no per-minute limit. The per-minute limits in the API reference apply to REST routes only. * **10 client registrations an hour** for each IP address. When the quota is used up, calls fail with `rate_limited`. ## Example prompts * "Show me the Acme deal with its stakeholders and open commitments." * "How many deals are in each stage, and what is the pipeline amount of each?" * "Every time security came up in the Acme calls this quarter, what was said?" * "Push the due date of this commitment to next Friday." # Privacy Modes Source: https://docs.meetdoris.com/privacy Control how names, emails and other personal data appear in Ontology API and MCP responses. Ontology reads have three privacy levels: `full`, `masked` and `anonymous`. The level controls how personal data (PII) appears in the response. Doris applies the level on the server, before the data leaves Doris. | Surface | Level | | - | - | | [Ontology API](/api-reference) | You choose with `?privacy=`. The default is `full`. | | [MCP server](/mcp-server) | Always `masked`. You cannot change it. | | [Demo sandbox](/sandbox) | Always `masked`. | ## Levels Doris returns every field as stored. ```json theme={null} { "full_name": "Adam Cross", "email": "adam.cross@minesoft.com", "phone": "+44 7700 900123", "linkedin_url": "https://linkedin.com/in/adamcross" } ``` Doris shortens names to initials after the first name. It keeps the first character and the domain of an email. It keeps the last 4 digits of a phone number. It removes LinkedIn URLs and message text. ```json theme={null} { "full_name": "Adam C.", "email": "a***@minesoft.com", "phone": "+** **** **0123", "linkedin_url": null } ``` Doris removes all identity. Stakeholders get a role label, for example "Champion #1". People in search results become "Contact #1", "Contact #2" and so on. The `emails` expand key is removed from the response. ```json theme={null} { "title": "Champion #1", "email": null, "phone": null, "linkedin_url": null } ``` ## Fields | Field | `masked` | `anonymous` | | - | - | - | | `full_name` | First name and initials: `Adam C.` | Removed | | `email` | `a***@minesoft.com` | Removed | | `phone` | Last 4 digits: `+** **** **0123` | Removed | | `linkedin_url` | Removed | Removed | | `owner_name` | Kept on deals. Initials on other types. | Removed | | `owner_email` | Kept on deals. Masked on other types. | Removed | | `sender` | First name and initials | Removed | | `sender_email` | `a***@domain.com` | Removed | | `preview`, `body_preview`, `body_text` | Removed | Removed | | Custom fields that your workspace marks as PII | Removed | Removed | "Removed" means the field comes back as `null`. At `masked`, `owner_name` and `owner_email` stay visible on `deal` records only. A deal owner is a member of your team, and you need to see who owns a deal. The same rules apply to expanded data. For example, the names and emails in the `stakeholders` of a deal are masked. ## Use the API parameter Add `privacy` to the query string. The default is `full`. An unknown value also gives `full`. ```bash theme={null} # Masked curl "https://server.meetdoris.com/api/v1/ontology/deal/$DEAL_ID?expand=stakeholders&privacy=masked" \ -H "Authorization: Bearer $DORIS_API_KEY" # Anonymous curl "https://server.meetdoris.com/api/v1/ontology/search?q=pricing&privacy=anonymous" \ -H "Authorization: Bearer $DORIS_API_KEY" ``` These five endpoints take `privacy`: | Endpoint | | - | | `GET /search` | | `GET /batch` | | `GET /{type_name}` | | `GET /{type_name}/{object_id}` | | `GET /{type_name}/{object_id}/links` | `GET /{type_name}/aggregate` does not take `privacy`. ## What masking does not cover * `search_transcripts` on the MCP server returns speaker names and transcript text as recorded. It does not apply a privacy level. * `ontology_aggregate` on the MCP server returns counts and measures. It does not apply a privacy level. # Quickstart Source: https://docs.meetdoris.com/quickstart Connect your CRM, calendars and meeting capture, then start work in Doris. This guide gives the first steps in a new Doris workspace. An admin does steps 1 to 3. Each rep does step 4. ## Before you start * To open settings, select **More** at the bottom of the sidebar, then select **Settings**. * Settings has two groups. **You** holds your own account, connections and preferences. **Workspace** holds the settings for your whole team. * Doris shows each **Workspace** item only to people with permission to use it. If you do not see **Integrations**, ask a workspace admin to do steps 1 to 3. ## 1. Connect your CRM Connect the CRM first. It gives Doris your companies, people, deals, pipelines and owners. Doris attaches calls and emails to these records. Doris connects to HubSpot, Salesforce, Zendesk Sell, Attio, Affinity and GoHighLevel. A workspace has one CRM connection. In **Settings**, select **Workspace** > **Integrations**. If the workspace has no integrations yet, Doris shows the list of providers. Find your CRM under **CRM** and select **Connect**. If the workspace already has integrations, select **Add integration**. The **Add workspace integration** dialog opens. Find your CRM under **CRM** and select **Connect**. Sign in to your CRM and approve the access that Doris asks for. For Salesforce, create the External Client App first. The [Salesforce guide](/integrations/salesforce) gives the steps. The [HubSpot guide](/integrations/hubspot) gives the HubSpot scopes. When you return to Doris, a banner shows that the CRM is connected. Select **Finish setup**. The connection does not import data yet. The **Import** tab shows five steps: **Authority**, **Pipelines**, **Record owners**, **Review** and **Initial import**. Choose the pipelines and record owners that Doris must import. Save the pipelines and record owners. Then, under **Review and start initial import**, select **Activate and start import**. Doris imports your companies, people and deals. Open **Records** in the sidebar to see them. ## 2. Connect calendars and email Doris uses calendars to find the meetings for each person. It uses email to add deal threads to each deal record. For a Microsoft 365 team, an admin connects calendars and email for the whole workspace. For a Google team, each person connects their own calendar in step 4. In **Workspace** > **Integrations**, find **Microsoft Calendar** or **Microsoft Email** under **Calendar & Email** and select **Connect**. A Microsoft 365 admin must approve the consent request. On the Microsoft 365 row, select **Manage**, then open the **Coverage** tab. Set **All members defaults**, or set a policy for a group or a person. Doris reads calendars and email only for the people that you cover. The [Outlook guide](/integrations/outlook) and the [Google Calendar guide](/integrations/google) give more detail. ## 3. Set meeting capture The Doris notetaker joins your calls, records them and makes the transcript. It works with Zoom, Microsoft Teams and Google Meet links. A new workspace starts on **Manual only**. Doris does not join any meeting by itself until an admin changes the join policy. In **Workspace** > **Integrations**, select **Configure meeting capture**. The **Meeting capture** page opens. Under **Doris join policy**, choose one option: * **Manual only**: a person chooses when Doris joins each meeting. * **External meetings**: Doris joins meetings that include someone outside your workspace. * **All meetings**: Doris joins every eligible calendar meeting. Most sales teams choose **External meetings**. Select **Save policy**. Select **Set up Gong** and follow the steps. Then select **Make primary** on the Gong row. While Gong is primary, Doris does not send its notetaker and uses Gong calls instead. The [Gong guide](/integrations/gong) gives the steps. ## 4. Start work in Doris Each rep does these steps. Open **Settings**. Doris opens **You** > **Connections**. Under **Needs you**, select **Connect** on **Google Workspace** or **Microsoft 365**. If your admin covers your Microsoft 365 calendar, it shows under **Handled by your workspace**, and you do not need to connect it. On **Home**, select **Send Notetaker**. Paste a Zoom, Teams or Google Meet link. You can attach a deal. Select **Send notetaker**. After the call, open **Meetings** in the sidebar. Doris shows the transcript and summary. It adds the commitments from the call to **Commitments**. On **Home**, type a question in **Ask anything**. You can also select **Prep for next meeting** or **Recap last call**. Ask questions and prepare for meetings. See each deal with its calls, emails and commitments. # Demo Sandbox Source: https://docs.meetdoris.com/sandbox Connect an MCP client to a read-only Doris ontology with synthetic data. No account and no API key. The demo sandbox is a public, read-only MCP server. It holds synthetic sales data for a fictional company, **Meridian Technologies**. Connect any MCP client and ask about its deals, meetings, commitments and people. You do not need an account or an API key. | | | | - | - | | Endpoint | `https://demo-mcp.meetdoris.com/mcp` | | Transport | Streamable HTTP | | Authentication | None | ## Connect ```bash theme={null} claude mcp add --transport http doris-demo-ontology https://demo-mcp.meetdoris.com/mcp ``` Add this to `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json theme={null} { "mcpServers": { "doris-demo-ontology": { "command": "npx", "args": ["mcp-remote", "https://demo-mcp.meetdoris.com/mcp"] } } } ``` ```bash theme={null} codex mcp add doris-demo-ontology https://demo-mcp.meetdoris.com/mcp ``` ```json theme={null} { "mcpServers": { "doris-demo-ontology": { "url": "https://demo-mcp.meetdoris.com/mcp" } } } ``` Point the client at `https://demo-mcp.meetdoris.com/mcp` with the Streamable HTTP transport. Do not configure authentication. ## Data The sandbox starts from seed data. The seed has 99 accounts, 315 contacts, 244 deals, 12 competitors and 15 tactics. It also has meetings, commitments, objections, strategies, risks, leads and products. Live counts change over time. A job runs each day at 06:00 UTC and moves some deals to a new stage. The sandbox shows 23 types: `deal`, `account`, `person`, `meeting`, `commitment`, `lead`, `pipeline`, `product`, `objection`, `competitor`, `competitor_result`, `pain_point`, `value_driver`, `decision`, `risk`, `strategy`, `tactic`, `framework`, `assessment`, `deal_outcome`, `closure_strategy`, `calendar_event`, `composition` A call for any other type returns `not_available`. ## Tools The sandbox has the 8 read tools of the [production MCP server](/mcp-server). It has no write tools. | Tool | Parameters in the sandbox | | - | - | | `ontology_types` | `type_name` | | `ontology_resolve` | `type_name`, `object_id`, `expand` | | `ontology_list` | `object_type`, `filters`, `sort`, `expand`, `limit`, `mine`, `offset` | | `ontology_search` | `query`, `types`, `filters`, `sort`, `limit`, `offset`, `mine` | | `ontology_batch` | `refs` | | `ontology_traverse` | `source_type`, `source_id`, `link_type`, `target_type`, `limit` | | `ontology_aggregate` | `object_type`, `group_by`, `metrics`, `filters`, `mine`, `time_bucket`, `time_field` | | `search_transcripts` | `query`, `date_from`, `date_to`, `mine`, `deal_id`, `meeting_id`, `meeting_ids`, `speaker`, `limit` | Some parameters of the production server are not in the sandbox, for example `expand_params`, `cursor` and `link_filter`. The sandbox has no signed-in user, so leave `mine` unset. In `search_transcripts`, `mine` is `false` by default. `ontology_types` in the sandbox does not show writable fields or actions. ## Privacy The sandbox uses the `masked` [privacy level](/privacy), the same as the production server. People come back with initials, for example "Michael D.". Emails come back as `m***@domain`. `search_transcripts` is not masked. ## Limits | Limit | Value | | - | - | | Calls for each IP address | 30 a minute and 500 a day | | Calls from all users together | 1,000 an hour | When you reach a limit, the tool returns `rate_limited` with a message. After 12 calls from one IP address, results include a `_demo_hint` field. It asks your AI tool to mention `https://meetdoris.com`. ## How the sandbox is isolated * The sandbox is a separate MCP server. The server fixes the workspace to the Meridian demo workspace. A request cannot change it. * The database connection is read-only. * The sandbox registers no write tools. ## Next steps Prompts to try against the sandbox. Connect your own Doris workspace. # Sandbox Cookbook Source: https://docs.meetdoris.com/sandbox-cookbook Prompts to try against the Doris demo sandbox, grouped by task. Connect the [demo sandbox](/sandbox) to your AI tool first. Then start a new conversation and paste a prompt from this page. Your AI tool picks the ontology tools. You do not need to know the API. The sandbox holds synthetic data for **Meridian Technologies**. Every deal, account and person named on this page exists in that data. The sandbox masks people. A prompt can name "Michael Dunn", but the answer shows "Michael D.". Emails come back as `m***@domain`. ## Start here ``` What deals are at risk and why? ``` ``` How many deals are in each pipeline stage, and what is the total amount in each stage? ``` ``` Which commitments are overdue right now? ``` ## Review a deal Use these prompts in order, in one conversation. 1. Find the deal. ``` Show me the Ironforge Core Migration deal with its stakeholders, commitments and strategy. ``` 2. Check the people. ``` Who are the stakeholders on this deal, and what role does each one have? ``` 3. Check the commitments. ``` Which commitments on this deal are still open? Are any overdue? ``` 4. Check the plan. ``` What is the strategy for this deal? What are the main risks? ``` 5. Check the last meeting. ``` What happened in the most recent meeting on the Ironforge deal? ``` ## Prepare for a meeting ``` I have a meeting with Cobalt Security tomorrow. What do I need to know? ``` Then ask: ``` What objections should I expect from Michael Dunn? ``` ``` What did we promise in the last meeting that we have not delivered? ``` ## Look at the pipeline ``` Which deals have been in the same stage for more than 30 days? ``` ``` Find deals that have overdue commitments. ``` ``` Show me the deals we lost. What reasons did the buyers give? ``` ``` What do our closed-won deals have in common? ``` ## Look at competitors ``` Which competitors come up most often, and in which deals? ``` ``` How do we position against Gong? ``` ``` Which open deals have a competitor in the evaluation? ``` ## Map the buyers ``` Show me all contacts at Apex Industries and their roles. ``` ``` Which stakeholders across the pipeline have a VP title or higher? ``` ## Track commitments ``` Group the overdue commitments by deal. ``` ``` Show me the buyer commitments that are still pending. ``` ``` Which commitments were completed this month? ``` ## Search what was said ``` Find every time pricing came up in the Velocity Dev Tools Suite meetings. Quote the speakers. ``` ``` What did buyers say about security reviews across all meetings? ``` ## Follow links between objects ``` Start with the Apex Enterprise Platform deal. Show its stakeholders, the meetings each one attended, and the commitments from those meetings. ``` ``` Which accounts have more than one open deal? ``` ## Tips "Show me deals" is vague. "Show me Enterprise deals in Negotiation over \$200K" gives the tool filters to use. Start broad, then narrow. For example, ask which deals are at risk, then ask what blocks one of them. The AI tool keeps the context of the conversation. A deal has expand keys for related data, for example stakeholders, commitments, meetings, risks and strategy. Ask for "full context" to get more of them. Ask "What entity types can you see?" The tool calls `ontology_types` and lists the 23 types in the sandbox. ## Use your own data The sandbox runs on synthetic data. To use Doris on your own pipeline, see [meetdoris.com](https://meetdoris.com). If you already have a Doris account, connect the [production MCP server](/mcp-server). # Your settings Source: https://docs.meetdoris.com/settings/account Manage your name, your personal connections, your theme, timezone and email notifications. Open **Settings** from the sidebar. The settings menu has two groups: * **You** holds your own settings. Everyone sees it. * **Workspace** holds settings for the whole workspace. You see only the items your role allows. | Group | Item | Page | | - | - | - | | You | **Account**, **Connections**, **Preferences** | This page | | Workspace | **Integrations** | [Integrations](/sources) | | Workspace | **People & access** | [People & access](/settings/people-and-access) | | Workspace | **Policies** | [Integrations: Policies](/sources#policies) | | Workspace | **Security** | [Security](/settings/security) | | Workspace | **Billing** | [Billing](/settings/billing) | | Workspace | **Developer** | API keys. See the Developers section | | Workspace | **Audit log** | [Audit log](/settings/audit-log) | When something needs you, **Settings** opens on **Connections**. ## Account **Account** shows your name and how you sign in. * **Name**: change your **First name** and **Last name**. * **Identity**: shows your **Primary email** and **Sign-in method**. Your identity provider manages these. You cannot change your email here. ## Connections **Connections** lists the accounts that Doris uses for you. | Section | What it holds | | - | - | | **Needs you** | Connections you must make or repair. Select **Connect**, **Reconnect** or **Retry** | | **Yours** | Your personal connections. Select **Disconnect** to remove one | | **Handled by your workspace** | Capabilities that your workspace provides for you. You do nothing | You can connect these accounts yourself: * **Google Calendar**. See [Google Calendar](/integrations/google). * **Microsoft 365** calendar. See [Microsoft 365 / Outlook](/integrations/outlook#personal-outlook-calendar). * **Zoom**, so Doris can capture your Zoom meetings. The page can also show accounts that flows act through, and the **Doris in Microsoft Teams** card. See [Doris in Microsoft Teams](/integrations/teams-bot). If a row says "Having trouble — ask an administrator", the workspace connection has a problem. Only an admin can fix it. ## Preferences **Preferences** has three sections. ### Appearance Choose the **Theme**: **Dark** or **Light**. The theme applies to this device only. ### Locale Choose your **Timezone**. Doris uses it for meeting and activity times. ### Notifications Choose which Doris updates arrive by email: | Setting | What you get | | - | - | | **Meeting summaries** | A summary when Doris finishes one of your meetings | | **Deal reviews** | Your deal-review updates | | **Flow notifications** | Email from flows you subscribe to | | **Team meeting summaries** | Meeting summaries for your reporting team. Managers only | | **Team deal reviews** | Deal-review updates for your reporting team. Managers only | # Audit log Source: https://docs.meetdoris.com/settings/audit-log See the history of workspace administration: connections, configuration and coverage changes. The **Audit log** is the history of workspace administration. Go to **Settings > Workspace > Audit log**. You see it only if your role allows it. Doris never shows credentials or secrets in it. You cannot change or delete entries. ## What Doris records | Action | When | | - | - | | **Workspace created** | The workspace was created | | **Workspace ownership transferred** | Ownership moved to another person | | **Integration connected** | Someone connected an integration | | **Integration disconnected** | Someone disconnected an integration | | **Integration refreshed** | A connection was refreshed | | **Capability enabled** | A module, such as Microsoft Calendar, was turned on | | **Capability paused** | A module was paused | | **Integration configuration updated** | CRM pipelines, owners or fields changed | | **Integration coverage changed** | Coverage defaults, groups or exceptions changed | ## Filter the log Use the filters at the top of the page: * **Action** * **Outcome**: **Succeeded**, **Denied** or **Failed** * **Actor** * **Integration ID** * **Resource type** * **From** and **To** dates Select **Apply filters**. Select **Clear** to remove all filters. Each connection also has an **Activity** tab with the history of that connection only. See [Manage a connection](/sources#manage-a-connection). # Billing Source: https://docs.meetdoris.com/settings/billing See your seats, add seats, update the payment method and view invoices. **Billing** shows your plan and seats. Go to **Settings > Workspace > Billing**. You see it only if your role allows billing. What the page shows depends on how your workspace pays. ## Workspaces on a Doris agreement The page says **Billing managed by your Doris agreement**. Your Doris account team handles subscription and invoice changes. The page shows "Seats used". When all seats are in use, talk to your Doris contact to add more. To manage people and roles, select **Open People & access**. See [People & access](/settings/people-and-access). ## Workspaces that pay by card The page shows **Subscription & Billing**, with your plan, status and seats. | Button | What it does | | - | - | | **Add seats** | Opens **Adjust seats** | | **Manage payment method** | Opens the billing portal | | **View invoices** | Opens the billing portal at your invoices | Only an admin sees these buttons. Other people see "Contact a workspace administrator if you need to update billing details." ### Add seats Select **Add seats**. Enter the seats you need. Doris shows **Current seats**, **Requested seats**, **Due now (proration)** and **New recurring amount**. Review the invoice preview. Then confirm the charge. The new recurring amount starts at your next billing cycle. ### Payment problems If a payment fails, the page shows **Billing attention needed**. Select **Fix billing** to update the payment method. ## Seats and invitations Every member and every open invitation uses a seat. When all seats are in use, you cannot invite more people. Remove a member or cancel an invitation to free a seat. For billing questions, email [support@meetdoris.com](mailto:support@meetdoris.com). # People & access Source: https://docs.meetdoris.com/settings/people-and-access Invite people, set product roles and reporting managers, and disable or remove members. **People & access** is where an admin manages who can use Doris. Go to **Settings > Workspace > People & access**. The header shows how many people and workspace integrations you have. If your plan has a seat limit, it also shows "N of M seats used". ## Invite people Select **Invite people**. The **Invite members** dialog opens. In **Email addresses**, enter one or more addresses. Separate them with commas, spaces or new lines. Choose **Admin**, **Manager** or **Member**. All people in one invite get the same role. Select **Send invites**. Doris skips an address that is already a member or belongs to another workspace, and tells you why. An invited person shows as **Invited** until they accept. An invitation uses a seat. When all seats are in use, **Invite people** is off. The page says "All N seats are in use. Free a seat or talk to your Doris contact." See [Billing](/settings/billing). ## Product roles | Role | Can do | | - | - | | **Workspace admin** | Everything a Manager can do. Also manages workspace settings, integrations, people and billing | | **Manager** | Everything a Member can do. Also sees leadership views and team email summaries for their reporting team | | **Member** | Uses Doris for their own meetings, deals and records | The invite dialog calls the admin role **Admin**. The people table calls it **Workspace admin**. ## Manage a person Each row in the table shows **Person**, **Lifecycle**, **Product role**, **Reporting**, **Integration coverage** and **Scoped access**. Open the row menu (**…**) to change a person. | Menu item | What it does | | - | - | | **Product role** | Changes the role to **Workspace admin**, **Manager** or **Member** | | **Reporting manager** | Sets who the person reports to, or **No reporting manager** | | **Disable member** | Stops access. You can enable the person again later | | **Enable member** | Gives access back to a disabled person | | **Remove member** | Removes the person from the workspace. Their history stays in Doris | | **Resend invitation** | Sends the invite again. For invited people only | | **Cancel invitation** | Withdraws the invite. For invited people only | Doris asks you to confirm before it disables or removes a person. Reporting managers decide who a Manager's team summaries cover. ### Integration coverage and scoped access **Integration coverage** shows whether each workspace connection covers the person, for example **Managed**, **Personal** or **Action required**. To change it, use the connection's **Coverage** tab. See [Coverage](/sources#coverage). **Scoped access** shows roles that apply to one connection only. Give scoped access on the connection's **Access** tab. ## Groups Groups exist only in managed workspaces. The **Groups** tab appears when the workspace has at least one group. Groups let you set integration coverage for a team at one time. There are two kinds: * **Directory sources**: groups that Doris reads from Microsoft 365, Google Workspace or Salesforce. You cannot edit them in Doris. Select **Sync Microsoft 365** (or the source name) to refresh them. * **Workspace groups**: groups you create in Doris. Select **Create group**, enter a **Group name**, then select **Create**. Use a group in a **Group policy** on a connection's **Coverage** tab. # Security Source: https://docs.meetdoris.com/settings/security Set the company domains that mark attendees as internal, and the name the notetaker uses in meetings. **Security** holds two workspace settings. Go to **Settings > Workspace > Security**. You see it only if your role allows it. ## Company domains **Company Domains** lists the email domains of your company. Doris treats attendees from these domains as internal. This affects two things: * Doris uses it to tell internal meetings from customer meetings. * A meeting with only internal attendees does not trigger Doris Notetaker. To add a domain, enter it (for example `parentcompany.com`) and select **Add Domain**. You cannot remove the primary domain. Doris sets it when it creates the workspace. The workspace must keep at least one domain. Add every domain your team sends email from, including parent and regional companies. A missing domain makes internal calls look like customer calls. ## Notetaker name **Notetaker Name** is the name Doris Notetaker uses when it joins a meeting. Everyone in the meeting sees it, including your customers. The default is `Doris AI Notetaker`. To change it, enter a name and select **Save Name**. To go back to the default, select **Reset to default**. The name can use letters, numbers, spaces and these symbols only: `-` `'` `.` `_` `@`. Microsoft Teams blocks other characters, such as brackets. Doris refuses a name with those characters, so the notetaker can still join Teams meetings. The name can have up to 64 characters. ## Related settings * The notetaker join policy is on the **Meeting capture** page. See [Meeting capture](/sources#meeting-capture). # Integrations Source: https://docs.meetdoris.com/sources Connect the systems Doris reads from, choose who each connection covers, and fix connections that need attention. **Integrations** is where a workspace admin connects the tools Doris reads from. Open it from **Settings > Workspace > Integrations**. You see **Integrations** only if your role can view integrations. Only an admin who can connect integrations sees **Add integration** and the **Connect** buttons. ## What you can connect | Family | Providers | Setup guide | | - | - | - | | **Meeting capture** | Doris Notetaker (built in), Gong | [Gong](/integrations/gong) | | **Calendar & Email** | Microsoft Calendar, Microsoft Email | [Microsoft 365 / Outlook](/integrations/outlook) | | **CRM** | HubSpot, Salesforce, Zendesk Sell, Attio, Affinity, GoHighLevel | [HubSpot](/integrations/hubspot), [Salesforce](/integrations/salesforce) | | **Documents & knowledge** | Notion, SharePoint | None yet | | **Automation & messaging** | Slack, Linear | None yet | Google Calendar and Zoom are personal connections. Each person connects them in **Settings > You > Connections**. See [Google Calendar](/integrations/google) and [Your settings](/settings/account). Doris uses one CRM for each workspace. Disconnect the current CRM before you connect a different one. ## Recommended order Connect [HubSpot](/integrations/hubspot) or [Salesforce](/integrations/salesforce). Then finish the CRM setup and start the initial import. Connect **Microsoft Calendar** for the whole workspace. Or ask each person to connect their own calendar. See [Microsoft 365 / Outlook](/integrations/outlook) and [Google Calendar](/integrations/google). Keep Doris Notetaker as the primary source, or make [Gong](/integrations/gong) primary. Set the join policy. See [Meeting capture](#meeting-capture). Connect **Microsoft Email** if Doris must read deal email threads. For each calendar, email and capture connection, choose who it covers. See [Coverage](#coverage). ## The Integrations page A new workspace sees the provider list. Each provider has a **Connect** button. After the first connection, the page groups connections into families: **Meeting capture**, **Calendar & Email**, **CRM**, **Documents & knowledge** and **Other**. Each row shows: * The provider and, for Microsoft 365, the module (Calendar or Email). * For calendar, email and capture rows: "N of M people covered · K need attention". * For other rows: "Connected" or "Not connected", and read, write or read & write access. * A health chip, for example **Needs attention · Reauthorization required**. * A **Manage** button that opens the connection. To connect another tool, select **Add integration**. Choose a provider and sign in with an account that can approve access for the workspace. ### Integrations needing attention A yellow box named **Integrations needing attention** lists each connection with a problem. Each item has a link, for example **Repair Microsoft 365**. Fix these first. A broken connection stops Doris reading that source. ### Finish workspace setup Until setup is complete, the page shows **Finish workspace setup** with a progress bar. Its button opens the next setup step. ## Manage a connection Select **Manage** on a row. The connection page has these tabs. You see only the tabs that apply to that connection and your role. | Tab | Use it to | | - | - | | **Overview** | See the connection state and what to do next | | **Connection** | See who authorized it. **Disconnect** it | | **Coverage** | Choose who the connection covers (calendar, email and capture only) | | **Configuration** | Choose CRM pipelines and record owners | | **Import** | Review the CRM import scope and start the import | | **Fields** | Choose extra CRM deal fields to import | | **Access** | Give other people scoped access to this connection | | **Activity** | See the history of this connection | Doris records every connection change in the [Audit log](/settings/audit-log). ## Meeting capture Doris uses one primary source for meeting transcripts. The choice applies to the whole workspace. To open it, select **Configure meeting capture** in the **Meeting capture** family. | Provider | What it does | | - | - | | **Doris Notetaker** | Joins eligible calendar meetings and captures the conversation | | **Gong** | Brings in verified Gong calls. Doris does not send its notetaker | | **MeetGeek** | Shows only for workspaces with an old MeetGeek connection. You cannot add a new one | To change the primary source, select **Make primary** on the provider. When Gong is primary, the Gong row shows **Doris bots blocked**. ### Doris join policy The join policy controls which meetings get Doris Notetaker automatically. | Policy | Doris joins | | - | - | | **Manual only** | Only meetings a person chooses | | **External meetings** | Meetings with someone outside your workspace | | **All meetings** | Every eligible calendar meeting | Select a policy, then select **Save policy**. Doris uses your [company domains](/settings/security#company-domains) to decide which attendees are internal. ## Coverage Coverage decides who a calendar, email or capture connection serves. Open a connection, then the **Coverage** tab. | Mode | Meaning | | - | - | | **Managed** | The workspace connection provides this capability | | **Personal required** | The member must connect their own account | | **Optional** | Doris uses a personal connection when one exists | | **Excluded** | Doris does not provide this capability for the member | Doris applies coverage in three levels: 1. **All members defaults** apply to everyone. 2. **Group policies** override the defaults for a group. Create groups in [People & access](/settings/people-and-access#groups). 3. A direct member exception overrides both. To change coverage, select **Edit coverage**, make the changes, then select **Save coverage**. If nobody is covered yet, select **Cover everyone** to make the connection available to every member. If a change excludes a member who has active managed coverage, Doris asks you to confirm. **Save and remove coverage** starts to remove that coverage. ### Policies Managed workspaces also have **Settings > Workspace > Policies**. It shows every workspace default, group policy and member exception on one page. Edit each rule on the connection's **Coverage** tab. ## If data looks wrong 1. Check **Integrations needing attention**. Repair each item. 2. Open the connection and check the **Overview** tab. 3. For a CRM, open **Configuration**. Check that the pipelines and record owners include the missing records. 4. For calendar or email, open **Coverage**. Check that the person is covered. 5. For records with missing links, open [Record health](/features/record-health). # Products Source: https://docs.meetdoris.com/tools/products Set up the catalog of what you sell, so Doris links products to your deals and calls. Products is the catalog of what your company sells. Doris uses it to link products to deals and to calls. The Products page has no link in the sidebar. Open it at [app.meetdoris.com/sources/products](https://app.meetdoris.com/sources/products). ## Set up your catalog Click the **Product Engine** circle in the center of the page. You can also click the **CRM**, **Help Docs** or **Website** card. **Stripe** is marked **Coming soon**. Enter your **Website** and your **Documentation** site. Doris also reads the products in your connected CRM. Check how Doris grouped what it found into products. CRM line items become pricing tiers. Optional. Choose the documents from your library that belong to each product. Doris finds the features, personas and value proposition of each product. ## Read a product Search the list and click a product. The product page has five tabs: * **Overview** shows the description, the value proposition and the **Connected Sources**. Click **Sync now** on a source to read it again. * **Features** shows each feature with its **Pain**, **Impact**, **Solution** and **Consequence**. * **Personas** shows the buyers and users the product is for. * **Pricing** shows the pricing tiers. * **Activity** shows the deals and the meetings linked to the product. You cannot edit a product on this page. To change it, change the source and click **Sync now**. ## How products link to your work * **Deals.** Doris links a product to a deal from the line items on the deal in your CRM. * **Meetings.** Doris links a product to a meeting when the call talks about it. # Webhooks Source: https://docs.meetdoris.com/webhooks Receive an HTTP POST from Doris when an event happens in your workspace. A webhook sends an HTTP POST to your endpoint when an event happens in your Doris workspace. Each workspace can have up to 10 webhooks. A webhook subscribes to one or more event patterns. The Doris app does not show webhook settings in this release. Webhooks that already exist continue to deliver. To add, change or remove a webhook, contact [support@meetdoris.com](mailto:support@meetdoris.com). ## Rules for the endpoint * The URL must use HTTPS. * The URL must not point to a private, internal or metadata address. Doris checks this when you create the webhook and again before each delivery. * Your endpoint must reply within 10 seconds. * A `2xx` status means the delivery succeeded. Doris ignores the response body. ## Events A pattern is an event type or a glob. For example, `deal.*` matches every event whose type starts with `deal.`. | Event type | When Doris sends it | | - | - | | `meeting.processed` | Doris finished processing a meeting. | | `deal.created` | A deal was created. | | `deal.stage_changed` | A deal moved to a different stage. | | `deal.updated` | A CRM webhook reported a created or updated deal. | | `deal.closed` | A deal closed. | | `deal.review_completed` | Doris finished a review of a deal. | | `commitment.created` | Doris recorded a new commitment. | | `commitment.overdue` | A commitment passed its due date. | | `flow.completed` | A flow run completed. | `deal.*` also matches other `deal.` events, for example `deal.meeting_processed` and `deal.stakeholder_changed`. Doris does not send events that come from a personal flow run. Events from workspace flow runs are sent. ## Payload Every delivery is a JSON object with these keys: | Key | Always present | Description | | - | - | - | | `event_id` | Yes | The event ID. | | `event_type` | Yes | The event type, for example `deal.stage_changed`. | | `timestamp` | Yes | The time of the event, in ISO 8601. | | `entity` | Yes | `{"type": ..., "id": ...}` of the object the event is about. | | `changes` | No | `{field: {"old": ..., "new": ...}}` when the event records one changed field. | | `data` | No | Event data. The keys depend on the event type. | | `context` | No | Extra metadata of the event. | ### Example: stage change from a CRM A CRM stage change records the field `stage_name`. ```json theme={null} { "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "event_type": "deal.stage_changed", "timestamp": "2026-09-18T14:30:00+00:00", "entity": { "type": "deal", "id": "5590756e-c2e2-50f9-ba17-0f8dcee493bd" }, "changes": { "stage_name": { "old": "Discovery", "new": "Negotiation" } }, "data": { "deal_id": "5590756e-c2e2-50f9-ba17-0f8dcee493bd", "pipeline_id": "default", "amount": 285000, "stage": "Negotiation", "previous_stage": "Discovery" } } ``` ### Example: meeting processed ```json theme={null} { "event_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "event_type": "meeting.processed", "timestamp": "2026-09-18T15:00:00+00:00", "entity": { "type": "meeting", "id": "039e66a3-15ee-5988-aca0-02f4829230d9" }, "data": { "meeting_id": "039e66a3-15ee-5988-aca0-02f4829230d9", "user_id": "7d0c2a8e-1b4f-4c5e-9a3d-2f6b8e1c0d9a", "title": "Apex weekly sync", "linked_deal_ids": ["5590756e-c2e2-50f9-ba17-0f8dcee493bd"], "linked_deal_count": 1, "system_call_type": null, "system_call_type_confidence": null, "suppress_emails": false, "skip_deal_review": false } } ``` ### `data` keys for each event | Event type | `data` keys | | - | - | | `meeting.processed` | `meeting_id`, `user_id`, `title`, `linked_deal_ids`, `linked_deal_count`, `system_call_type`, `system_call_type_confidence`, `suppress_emails`, `skip_deal_review` | | `deal.created` | `deal_id`, `deal_name`, `amount`, `stage` | | `deal.stage_changed` | `deal_id`, `pipeline_id`, `amount`, `stage`, `previous_stage` | | `deal.updated` | `deal_id`, `action` (`created` or `updated`), `changed_fields` | | `deal.closed` | `deal_id`, `is_won`, `amount` | | `deal.review_completed` | `entity_count`, `user_id`, `deal_name`, `risk_count`, `highest_severity`, `stakeholder_count`, `trigger` | | `commitment.created` | `description`, `owner_type`, `due_date`, `deal_id`, `source_meeting_id` | | `commitment.overdue` | `description`, `due_date`, `days_overdue`, `deal_id` | | `flow.completed` | `flow_run_id`, `node_count` | A key can be missing or `null` when the source did not supply it. Only HubSpot fills `changed_fields` on `deal.updated`. ## Headers | Header | Value | | - | - | | `Content-Type` | `application/json` | | `X-Doris-Signature` | `sha256=` and the HMAC-SHA256 of the raw body, in hex | | `X-Doris-Event` | The event type | | `X-Doris-Delivery` | The delivery ID. It stays the same on each retry of a delivery. | ## Verify the signature Each webhook has a signing secret that starts with `whsec_`. Doris shows the secret once, when you create the webhook. Compute the HMAC-SHA256 of the raw request body with the secret as the key. Compare the result with `X-Doris-Signature`. ```python Python theme={null} import hashlib import hmac def verify_signature(body: bytes, signature_header: str, secret: str) -> bool: expected = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, signature_header) ``` ```javascript Node.js theme={null} const crypto = require('crypto'); function verifySignature(body, signatureHeader, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(body) .digest('hex'); const a = Buffer.from(expected); const b = Buffer.from(signatureHeader); return a.length === b.length && crypto.timingSafeEqual(a, b); } ``` Use the raw body bytes. If you parse the JSON and serialize it again, the signature does not match. Signature checks are optional. A tool such as n8n, Power Automate or Zapier can accept the JSON body without a check. ## Retries Doris makes up to 3 attempts for each delivery. | Attempt | When | | - | - | | 1 | When the event happens | | 2 | About 1 minute after attempt 1 fails | | 3 | About 5 minutes after attempt 2 fails | A timeout, a network error or a status that is not `2xx` counts as a failure. After attempt 3 fails, the delivery stops. If the URL points to a blocked address at delivery time, the delivery fails at once, with no retry. A job checks for due retries every 60 seconds, so a retry can come up to a minute late. ## Test event A test sends this body to your endpoint, with the `X-Doris-Signature` and `X-Doris-Event` headers. A test has no `X-Doris-Delivery` header. ```json theme={null} { "event_id": "test-000", "event_type": "test.ping", "timestamp": "2026-05-05T00:00:00Z", "entity": { "type": "test", "id": "ping" }, "data": { "message": "Webhook test from Doris console" } } ```