# Chat Widget Agent Source: https://docs.decimal.app/agents/chat-widget Answer end users directly in the widget embedded on your site. The Chat Widget answers the people using your product, through the widget you embed on your site. It's the only one that talks to end users without a teammate in between, so its [tone and voice](/agents/tone-voice) is worth setting deliberately rather than leaving on the default. Open **Agents** and select **Chat Widget**, where you can configure its tone and voice. For the requests your team handles the same way every time, a [policy](/policies) takes the agent through your procedure step by step instead of leaving it to answer from your knowledge base. Everything else about the widget lives under [Chat Widgets](/chat-widgets/overview): installing it, verifying who your users are, and reading the [conversations](/chat-widgets/conversations) it has had. # Investigation Format Source: https://docs.decimal.app/agents/investigation-format Define the sections the agent's investigation summary follows, publish the template, and roll back a version that didn't work. Open **Agents**, select **Support Agent**, then **Investigation Format**. This is the shape of the investigation summary your team reads on a ticket, not the customer-facing reply.
Only the Support Agent has this tab, since it's the only agent that writes an investigation summary.
The Investigation Sections editor ## Sections Each section has a **name**, which becomes the heading in the summary, and a **description** telling the agent what belongs under it. The description is where the work happens: "Root Cause" means little on its own, while "the specific code path or config that produced the behavior, or say you couldn't determine it" tells the agent what you expect. Sections are numbered in the order the agent writes them. **Add section** appends one, and **Start from** drops in a ready-made set: **Dynamic**, **Sections**, **Q\&A**, or **RCA**. Leave the sections empty and the agent falls back to a single-section summary. The published sections also appear as the parts you can include under [Reply Content](/support/reply-content), and you can see the result on a real ticket in [Ticket Detail](/support/ticket#reading-the-answer). ## Publishing Edits stay a draft until you press **Publish**, and an **Unsaved changes** bar sits at the bottom of the page until you do, with **Discard** next to it. The agent follows the published template on its next run, so an in-progress rewrite never reaches a ticket. ## Version History Every publish is kept as a numbered version with the summary of what changed, who published it, and when. The version in use is marked **Current**. On any older version, **View diff** shows what changed from the one before it, and you can roll back to it from there. # Agents Source: https://docs.decimal.app/agents/overview The agents in your workspace, what each one answers, and where to configure them. **Agents** in the sidebar lists every agent in your workspace. Open one to set its [tone and voice](/agents/tone-voice), and, for the agents that have them, its own settings.
Only organization administrators can open **Agents**. Your teammates still work tickets in [Support](/support/overview) as usual.
The Agents list | Agent | What it answers | | -------------------------------------- | ------------------------------------------------------------ | | [Support Agent](/agents/support-agent) | Support tickets, with an investigation behind each answer | | [Slack](/agents/slack) | Questions in Slack DMs and channels | | [Chat Widget](/agents/chat-widget) | End users in the widget on your site | | [Playground](/agents/playground) | Your own team's questions across every connected data source | The switch in the top right of an agent's page turns it on and off. Switch it off and that agent stops answering, while your configuration stays as you left it. # Playground Agent Source: https://docs.decimal.app/agents/playground Answer your own team's questions across every connected data source. The Playground answers your team, not your customers. It reaches across every connected source, so it's the one to ask when you want to explore the codebase, find what the knowledge base already says, or work through a problem before a ticket exists. Open **Agents** and select **Playground**, where you can configure its [tone and voice](/agents/tone-voice). [Playground](/playground/overview) covers its usage: setting which repositories it searches, pinning tickets or articles as context, attaching files, and saving an answer as a knowledge base article. It can also answer questions about your own support history, which [Ask Data](/playground/ask-data) covers. # Public Agent Source: https://docs.decimal.app/agents/public-agent A second agent that answers your customers directly, grounded only in what is already public about your product.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20Public%20agent) to turn it on. If you don't see a **Routing** tab on the Support Agent, it isn't on yet.
Most tickets in your queue are answered by the **private agent**: it investigates across everything you've connected, then hands your team a draft. The **public agent** is a second agent that works differently. It answers the customer directly, and it is only allowed to use information a customer could already have found on their own. That restriction is the point. An answer built only from your public documentation and public code is an answer that is safe to send without a person reading it first. ## Two Agents, Two Evidence Bases Both agents can run on the same ticket. What separates them is what they are allowed to look at, and who reads the result. | | Private agent | Public agent | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | | **Sources** | Everything connected: internal and public knowledge base, private and public repositories, logs, warehouses, past tickets, payments | Public knowledge base articles, public repositories, your status page | | **Audience** | Your support team | Your customer | | **Default outcome** | A draft your team reviews and sends | A reply the customer receives | | **Best at** | "Why did this specific account break?" | "How do I do X?" | The private agent is the stronger investigator. It can trace a failing request through your logs and tell you which customer record is wrong. The public agent cannot do any of that, and it is not meant to. It exists to clear the large share of your queue that never needed an investigation in the first place. ## What the Public Agent Can See The public agent has a deliberately short list of sources: * **Public knowledge base articles.** Only articles marked **Public** in your [knowledge base](/knowledge-base/manage-articles). Anything left private is invisible to it, including every investigation note your team has written. * **Public code repositories.** Only repositories that are public on GitHub, GitLab, or Bitbucket. If all of your connected repositories are private, the public agent works from the knowledge base alone. * **Your status page**, if your workspace has one configured. When a customer reports that something is broken and an incident is live, the agent points them at the status page rather than guessing. It has no access to internal tickets, private repositories, observability data, data warehouses, payment records, or any of the other tools the [private agent](/agents/tools) can call. The public agent toggle on the Settings tab ## Every Answer Is Verified The public agent does not get to decide on its own that an answer is good enough. Before anything is delivered, a separate verifier reads the drafted reply and checks it sentence by sentence against the sources the agent cited. Three things can happen: * **The answer holds up.** Every claim traces back to a cited source, and the reply goes out as written. * **Part of it doesn't hold up.** The verifier rewrites the answer down to the parts that are supported, dropping the rest. * **Too little survives.** The verifier blocks the reply. Nothing goes to the customer. The draft lands on the ticket as an internal note instead, and the ticket waits for your team like any other. The agent is also held to a strict citation rule: every claim it makes must be traceable to a specific article or file. If it cannot cite a claim, it is not allowed to make it. ## How Its Replies Are Signed A public agent reply goes to the customer under your team's name, so what sits at the bottom of it matters more here than it does on a draft your team reads before sending. **Signature rules** decide that. Open **Agents**, select **Support Agent**, go to the **Replies** tab, and find **Signature**. Each rule reads as a sentence you assemble from dropdowns: > When the **public agent** replies **in category** Billing question, sign **as** Sarah or Ada. * **Which agent it covers.** Rules are written per agent, so the public agent can sign differently from the drafts your team sends out. * **When it applies.** To any ticket, to tickets in specific [routing categories](/agents/routing), or to tickets on specific channels. * **How it signs.** As one or more **teammates**, with **custom text** you write, or with **no signature** at all. Rules are read top to bottom and **the first match wins**, so put your specific rules above your general ones. Each rule has its own switch, you can reorder them with the arrows, and you can keep up to 20. Signature rules on the Replies tab, with category-specific rules sitting above the catch-all ### Signing as a Teammate Choosing a teammate signs the reply with that person's [reply signature](/support/preferences#your-reply-signature), rendered with their name. Choose more than one and Decimal picks between them per ticket. The pick is stable rather than random: the same ticket always resolves to the same signer, so a follow-up on a thread is signed by whoever signed the first reply rather than by a different name each time.
Signing as a named teammate is most of what makes an automated reply read like it came from your team. Pair it with a [response delay](/agents/routing#response-delay) on the category and the reply arrives signed by a person, at a pace a person could have worked at.
If a teammate you picked has no reply signature configured, that rule is skipped and the next matching rule applies. If no rule matches at all, the agent signs off however its [tone and voice](/agents/tone-voice) leads it to. ## Public Agent vs Full Autonomy These two features both end with a customer receiving a reply nobody on your team typed, which is why they get confused. They solve different problems and they work independently. | | Public Agent | [Full Autonomy](/support/full-autonomy) | | --------------------------- | --------------------------------------------------------------- | --------------------------------------------------------- | | **The question it answers** | Which agent should answer this ticket? | Should the private agent's draft be sent without a human? | | **Whose answer goes out** | The public agent's | The private agent's | | **Evidence behind it** | Public sources only | Everything you've connected, internal data included | | **What holds it back** | The verifier, plus the [routing](/agents/routing) rules you set | The verifier, your guardrails, and a confidence threshold | The clean way to hold the difference: **Full Autonomy changes who presses send. The public agent changes who writes the reply, and what they were allowed to read while writing it.** You can run either one alone, or both together. When both are on, [routing](/agents/routing) decides which agent's answer is the candidate for the customer, and Full Autonomy governs the private drafts that routing keeps in-house. ## Turning It On 1. **Open the Settings tab.** Go to **Agents**, select **Support Agent**, then **Settings**. 2. **Turn on Run the public agent.** From here the public agent starts drafting alongside the private agent. 3. **Open the new Routing tab.** Turning the public agent on adds a **Routing** tab to the Support Agent, where you decide which kinds of tickets it is trusted to answer. 4. **Define your categories in Preview.** New categories start in **Preview**, so the public agent drafts real answers and posts them as internal notes without any of them reaching a customer. See [Routing](/agents/routing). 5. **Read the previews on real tickets.** Give it a week of live traffic and read what it would have sent. 6. **Switch the categories you trust to Live.** Move them one at a time rather than all at once.
The public agent is only as good as your public knowledge base. If the previews are thin, that is usually a signal about your documentation rather than about the agent. [KB gap detection](/knowledge-base/kb-gap-detection) will tell you which articles are missing.
## What You See on the Ticket Every public agent run is recorded on the ticket, whether or not the customer saw it. * **In Preview**, the drafted answer posts as an internal note headed **Public Agent Response**. Your team sees exactly what would have gone out. * **In Live**, the answer is posted as a reply to the customer, and the ticket shows it as the reply that was sent. * **When the verifier blocks a reply**, the draft posts as an internal note and the ticket is left for your team. A public agent response on the ticket timeline ## When the Public Agent Stands Down The public agent does not answer every ticket it drafts for. It steps aside when: * **A teammate has already replied.** The agent never sends over a human. * **The verifier blocked the answer.** Covered above. * **The customer is asking for a person**, or is visibly frustrated with automated replies. The ticket is handed to your team. * **Someone mentions Decimal directly** on the ticket. A direct mention is a request for the investigating agent, so the ticket goes private. * **The conversation was escalated from a [chat widget](/chat-widgets/overview).** The widget already tried the public path, so the ticket arrives on your team's side of the line. * **Your [routing](/agents/routing) rules send it elsewhere.** A category that routes to the private agent, or a router decision that the thread now needs more oversight. In each of these cases the work is not thrown away. The draft is still on the ticket, and the private agent's investigation is still there for whoever picks it up. # Routing Source: https://docs.decimal.app/agents/routing Routing categories decide which tickets the public agent may answer, how its replies are delivered, and how long it waits before sending.
The **Routing** tab appears once the [public agent](/agents/public-agent) is enabled for your workspace. Without a public agent there is nothing to route between.
Once you have two agents, every ticket needs an answer to one question: who takes this one? **Routing categories** are how you answer it in advance, in your own words, for the kinds of tickets you actually get. A category is a description of a recurring kind of ticket, plus a decision about how it should be handled. "Password reset requests go to the public agent, live." "Anything about billing goes to a human." "Bug reports get drafted by both agents, and we'll see which answer is better." Open **Agents**, select **Support Agent**, then **Routing**. The Routing tab with a list of categories ## How a Ticket Gets Routed Routing runs on every turn of a conversation, not just when the ticket arrives. A thread that started simple can stop being simple, and the routing follows it. 1. **The router reads the thread** and matches it against your approved categories. It judges the ticket on what the customer needs right now, not on the tone or the length of the message. 2. **The matched category sets the starting point.** A category that routes to the public agent starts the ticket there. 3. **The router can add oversight, never remove it.** From that starting point it asks whether this particular conversation has gone somewhere that needs more human involvement: an answer that didn't land, a question asked twice, a request that now turns on a decision only your team can make. It can move a ticket from public to both, or from either to private. It can never move a ticket the other way, so a category that routes to your team stays with your team. 4. **The agents run.** Which ones depends on the decision. 5. **When both ran, a comparison step picks the winner.** It reads both drafts and asks whether the private agent found something the public agent could not. If it did, the ticket stays internal. 6. **The reply is delivered** according to the category's delivery setting and response delay. ## Where a Category Can Route **Routes to** is the core setting on a category. It has three values. | Routes to | What runs | What the customer gets | | ----------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | **Public agent** | Only the public agent | Its answer, subject to the verifier and your delivery setting | | **Private agent** | Only the private agent | Nothing automatic. Your team reviews the draft and replies | | **Both agents** | Both, in parallel | Whichever answer the comparison step picks. The public answer only wins if it covers the ticket as well as the private one did | ## Creating a Category Click **Add category** to open the editor. The category editor ### Name and Description Write the **Name** the way your team would say it out loud: "Billing refund request", "SSO setup question". The **Description** is where you say when the category applies. Be concrete about the boundary, because that is what the router leans on when a ticket sits between two categories. ### Example Tickets Pick real tickets from your own history that belong in this category. They are not used for matching at runtime. They are fed to the model when it writes the AI definition below, and a handful of real examples does more for accuracy than another paragraph of description. ### AI-Enhanced Category Definition Click **Generate** and Decimal expands what you wrote into the fuller definition the router actually reads: a classification description and a set of example phrasings. You can open it, edit any part of it by hand, and save. If you later change the name, description, or example tickets, the definition is marked **Out of date** and the button becomes **Regenerate**. Regenerating overwrites manual edits, so Decimal asks you to confirm when it would. A category cannot be saved or approved until this definition has been generated. ### Status | Status | What it does | | --------------------- | -------------------------------------------------------------------------------- | | **Suggested (draft)** | Saved, but ignored by the router. Use it to draft a category before you trust it | | **Approved** | Live. The router will match tickets against it | Only approved categories with a generated definition are used for routing. You can approve a category from the list with the checkmark, or from the editor. ## Delivery: Preview and Live Categories that route to the public agent (**Public agent** or **Both agents**) get a **Delivery** setting. This is the safety valve, and it is per category rather than per workspace. * **Preview** (the default for every new category): the public agent does the full job, and its answer posts to the ticket as an internal note. Nothing reaches the customer. This is sometimes called shadow mode. * **Live**: the answer is sent to the customer. The Delivery and Response delay settings
Every category starts in **Preview** on purpose. Leave it there through a full cycle of real traffic, read the notes it produces, and promote one category at a time. Preview is the only way to see how a category behaves on tickets you didn't think of when you wrote it.
Delivery is a floor, not a guarantee. A category set to **Live** still produces an internal note instead of a customer reply when the verifier blocks the answer, when a teammate has already replied, or when the router or comparison step moves the ticket to the private agent. ## Response Delay An answer that lands a second after the customer hits send reads as a machine, however good the answer is. No person types that fast, and customers notice. **Response delay** holds the reply for a set number of minutes so it arrives at a pace a teammate could plausibly have worked at. Set it up to **60** minutes, or leave it empty to reply as soon as the answer is ready. The details worth knowing: * **The clock starts at the customer's most recent message**, not at the moment the agent finished working. A five minute delay on an answer that took four minutes to produce sends one minute later, not five. * **If the delay has already passed** by the time the answer is ready, the reply goes out immediately. * **If the customer writes again during the delay, the pending reply is dropped.** The agent reprocesses the thread including the new message and answers the whole thing, rather than sending a reply to a question the customer has already moved past. * **The delay applies in Preview too.** It holds the turn, so the internal note also waits. Response delay is available on categories that route to the public agent. It has no effect on **Private agent** categories, whose replies are sent by your team anyway. ## When No Category Matches The router returns no category when nothing in your list describes the ticket. What happens next depends on your workspace. By default, an uncategorized ticket goes to **both agents** and the comparison step decides. If your workspace has automatic routing enabled, the comparison step is allowed to send a public reply on a ticket that matched no category at all. That is the case the **Daily auto-routed public reply limit** exists for. It caps how many uncategorized tickets can receive a public reply in a rolling 24 hour window, and it defaults to **30**. Tickets that matched an approved public category are not counted against it, so the limit constrains only the tickets you never wrote a rule for. Once the cap is reached, uncategorized tickets fall back to your team until the window rolls forward. The daily auto-routed public reply limit Raise it as your categories get better and your confidence grows. Lower it, or set it to 1, if you want the public agent to answer only tickets you have explicitly described. ## What Overrides a Category A category states an intent. Several things can still pull a ticket toward more human involvement, and none of them can push it the other way. | Trigger | Result | | --------------------------------------------------------------------------- | ---------------------------------------- | | The customer asks for a person, or is frustrated with automated replies | Private agent | | The router judges the thread now needs more oversight | Moved up one or two steps | | The comparison step finds the private agent added something real | Private agent | | The verifier blocks the public answer | Internal note, ticket left for your team | | A teammate has already replied on the ticket | The agent stands down | | Someone mentions Decimal directly on the ticket | Private agent | | The conversation was escalated from a [chat widget](/chat-widgets/overview) | Private agent | | The daily auto-routed limit is reached, on an uncategorized ticket | Private agent | ## A Suggested Rollout 1. **Start with your three most repetitive ticket types.** Look at what your team answers with near-identical wording every week. Those are the categories worth writing first. 2. **Choose a routing target for each one.** **Public agent** runs the public agent alone, which is the direct choice when you already know the answer lives in your documentation. **Both agents** runs both and shows you which draft the comparison step preferred. Either way, leave the category in **Preview** to start. 3. **Read the previews for a week.** You are checking one thing: would you have sent that? 4. **Switch the categories you trust to Live.** One at a time. 5. **Add a response delay** on the categories where an instant reply would feel out of place. 6. **Write private categories for the things you never want automated.** Billing disputes, security reports, anything with a contractual edge. A category that routes to the private agent is a rule the router cannot talk itself out of. 7. **Revisit the daily limit** once your categories cover most of your volume. # Support Agent Settings Source: https://docs.decimal.app/agents/settings Decide which tickets the Support Agent answers, how many times it can reply, and what it may do without a human. Open **Agents**, select **Support Agent**, then **Settings**. The [Slack agent](/agents/slack) has its own settings, unrelated to these. ## Skip Rules Skip rules run before the agent does, so a skipped ticket costs nothing and never gets a draft. Each rule has its own switch, so you can keep a list without applying it. * **Skip tickets from these senders**: an address or a whole domain. Enter `@acme.com` for everything from that domain, or a full address for one person. Use it for internal teammates, no-reply addresses, and vendors. * **Skip tickets with these subject lines**: matches a phrase anywhere in the subject, one phrase per line. Replies that come back as "Re: ..." are caught too, so a campaign blast you want to handle by hand stays out. * **Skip Slack-sourced tickets**: useful when your Slack tickets route through another system first and you'd rather the agent answered them there. * **Drop messages from these author IDs**: hides individual messages, not whole tickets, before the agent reads them. Paste the platform's user ID for an automated agent or internal bot. Skip rules on the Settings tab ## Response Limits **Maximum AI responses per ticket** is three by default. Once the agent hits the cap it stops replying to new messages on that ticket, which is what breaks the loop when a customer's automated mailer answers every reply. ## Public Agent **Run the public agent** lets a second agent answer the customer directly using only publicly available information about your product. Left off, only the private agent runs and every answer stays internal for your team to send. Turning it on adds a **Routing** tab to the Support Agent, where you decide which kinds of tickets it may answer. See [Public Agent](/agents/public-agent) and [Routing](/agents/routing). ## Auto Acknowledgement If your workspace has it, the agent posts an immediate holding reply while it investigates, so the customer knows the ticket landed. The message is yours to edit. ## Refund Controls These appear only when [Stripe](/integrations/stripe) is connected. **Let the agent handle refunds** is the master switch. Off, the agent can still look payments up but never refunds. On, you choose how far it goes: * **Approval**: **Recommend** has the agent propose a refund for an admin to approve from the ticket, so nothing leaves your Stripe account until someone clicks. **Issue** lets it refund on its own. * **Only admins can approve refunds**: off, any member can approve a recommended refund and send it to Stripe. * **Maximum amount per refund**: above this the agent recommends instead of issuing, even in **Issue** mode. * **Maximum refunds per 24 hours**: after this many, it falls back to recommending. Response limits, public agent, and refund controls # Slack Agent Source: https://docs.decimal.app/agents/slack Answer support questions in Slack, and control when the bot engages and what it says when it can't help. In Slack, Decimal answers support questions in direct messages to the bot and in channels where someone has invited it. This needs the [Slack integration](/integrations/slack) connected first. Open **Agents**, select **Slack**, then set its [tone and voice](/agents/tone-voice) or the settings below. * **Reply to direct messages** controls whether a DM to the bot gets a real answer. Turn it off and DMs get your default response instead. * **Monitor tagged threads** keeps the bot in a conversation once someone has mentioned it. On, it answers follow-ups in that thread without being mentioned again. Off, every question needs its own mention. ## Default Response When the bot isn't answering somewhere, this is what it says instead. Write it as a message to the person who asked, and use variables like `{{user.first_name}}` to address them by name. You can also name a fallback channel by its Slack channel ID, to point people at the place your team does want the question asked. # Support Agent Source: https://docs.decimal.app/agents/support-agent The agent that investigates and answers support tickets, and everything you can configure about how it works. The Support Agent picks up tickets as they sync, investigates them across your connected sources, and drafts an answer for your team. [Ticket Detail](/support/ticket#reading-the-answer) shows what that looks like on a ticket. Open **Agents** and select **Support Agent**. It has more configuration than the other agents, spread across its tabs. | Tab | What you set | | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | [Tone & Voice](/agents/tone-voice) | How its replies read | | [Investigation Format](/agents/investigation-format) | The sections its investigation summary follows | | [Settings](/agents/settings) | Which tickets it answers, how often it replies, and what it may do without a human | | [Reply Content](/support/reply-content) | What it posts on the ticket | | [Full Autonomy](/support/full-autonomy) | Whether it sends replies to customers itself | | [Routing](/agents/routing) | Which tickets the [public agent](/agents/public-agent) may answer, and how its replies are delivered | | [Tools](/agents/tools) | Which external capabilities it can call | **Routing** appears only when the [public agent](/agents/public-agent) is enabled for your workspace. **Tone & Voice** and **Investigation Format** hold a draft while you edit, and the agent keeps using the published version until you press **Publish**. Both keep a version history you can compare and roll back to. The rest saves as you change it and applies on the agent's next run. # Tone & Voice Source: https://docs.decimal.app/agents/tone-voice Set how the agent's replies read, using a preset or your own written instructions, and publish the change when you're ready. Open **Agents**, select an agent, then **Tone & Voice**. This shapes how replies read, not what the agent investigates. For example, you might make the Chat Widget warmer for the end users it talks to, and keep the Support Agent brief and direct for your team. The Tone & Voice tab ## Presets Pick a starting point: * **Technical**: precise and direct, for developer-facing support. * **Friendly**: warmer and more conversational. * **Concise**: shortest answer that resolves the ticket. * **Empathetic**: leads by acknowledging the customer's situation. * **Custom**: start from an empty box and write your own. Selecting a preset fills the instructions with its wording, which you can then edit. ## Instructions The instructions are plain language, applied to every reply the agent drafts. Write the things a new teammate would need to be told: sign-offs to use or avoid, words your customers don't know, whether to apologize, how formal to be. ## Publishing Your edits stay a draft until you press **Publish**, so the agent keeps using the last published version while you work. Under the version history, each version shows what changed. Compare any version against the one before it, and roll back if a change made replies worse.
If your workspace has the public agent turned on, you can give it a separate tone from the internal one and resync the two later.
# Tools Source: https://docs.decimal.app/agents/tools Choose which external capabilities the Support Agent can call while it investigates a ticket. Open **Agents**, select **Support Agent**, then **Tools**. Each tool is a capability the agent can call while investigating: searching your code, querying logs, looking up a customer in your warehouse, reading a knowledge base article.
Only the Support Agent has this tab. The other agents don't expose tool controls.
Turn a tool off and the agent stops calling it, even if the integration behind it stays connected. The count in the top right is how many are on. Tools appear here once the integration that provides them is connected, so the list grows as you add [integrations](/integrations/overview). An empty list means nothing is connected yet. Turning a tool off narrows what the agent can find, which shows up as thinner investigations rather than an error. You can see which tools an investigation used on the ticket itself, under [Ticket Detail](/support/ticket#reading-the-answer). # Get conversation Source: https://docs.decimal.app/api-reference/chat/get-conversation /openapi-v0.yaml get /v0/chat/{conversation_id} Returns the conversation with all messages. Use this to poll for completion after sending a message, checking the top-level `status` field. # Send a message Source: https://docs.decimal.app/api-reference/chat/send-a-message /openapi-v0.yaml post /v0/chat Send a message to get an AI-powered response. Omit `conversation_id` to start a new conversation, or provide one to continue an existing conversation. Returns `202 Accepted` immediately. The AI processes in the background. Poll `GET /v0/chat/{conversation_id}` until `status` is `completed`. # Escalate to ticketing integration Source: https://docs.decimal.app/api-reference/escalation/escalate-to-ticketing-integration /openapi-v0.yaml post /v0/chat/{conversation_id}/escalate Escalate a completed conversation to an external ticketing integration (Plain, Pylon, or Linear). Creates a ticket with the conversation transcript and AI-generated summary. Can only be called once per conversation. Subsequent calls return `409 Conflict`. # Get current token info Source: https://docs.decimal.app/api-reference/utility/get-current-token-info /openapi-v0.yaml get /v0/me Returns information about the authenticated API token and organization. # Changelog Source: https://docs.decimal.app/changelog New features, improvements, and fixes in Decimal.
[August 2026](#august-12-2026) [July 2026](#july-31-2026) [June 2026](#june-25-2026) [May 2026](#may-2026) [April 2026](#april-2026) [March 2026](#march-2026) [February 2026](#february-2026)
## Connect Auth0, Clerk, or WorkOS Identity questions no longer mean leaving the ticket. Connect your provider from **Settings → Integrations** and the agent checks SSO and directory sync while it investigates. See [Auth0](/integrations/auth0), [Clerk](/integrations/clerk), and [WorkOS](/integrations/workos). ## Secure links, roadmap answers, and your warehouse The agent reads what a customer sent through a [SendSafely](/integrations/sendsafely) link, instead of stopping at the link. Before it tells someone a feature doesn't exist, it checks [Canny](/integrations/canny) for the idea, with status, votes, and any ETA. [BigQuery](/integrations/bigquery) answers the number a ticket turns on, and [Solana](/integrations/solana) looks up a Mainnet transaction by signature. ## Resize the ticket list to fit your work Drag any column border, double-click to reset, and your widths are waiting next time. Titles fit now too: the Ticket column starts wider. ## Transcripts say what the agent did A tool step names the log group it searched or the term it looked for, instead of handing you a result count and leaving you to guess. ## Format a signature the way you'd expect Select text and press **⌘B**, **⌘I**, or **⌘U**. Paste a link over a selection and it becomes a hyperlink. The preview shows exactly what your customer will see. Markdown typed by hand used to sit there as literal text, which was easy to mistake for broken. ## Sharper answers in Ask Data Ask something with an exclusion in it and you get one exact answer rather than an approximation. See [Ask Data](/playground/ask-data). Zendesk connections also hold up under heavy API traffic, and can idle 60 days instead of 30. ## Refunds check who actually paid Before issuing one, the agent compares the email that opened the ticket with the email on the payment. If they differ, the refund waits for a human, and the approval screen shows you both. Amounts now read **\$206.00** rather than 20600. See [Stripe](/integrations/stripe). ## Follow an article back to its ticket Hover the linked ticket to see its number, title, status, and assignee. **For you** remembers your choice across refreshes, and you can decide what it means under **Settings → Preferences**. ## The ticket you searched for comes first Search the list and the closest match sits at the top, instead of behind whatever arrived most recently. Column headers still sort explicitly, and clearing the search puts things back. ## Templates worth trusting, and a key for your voice Break ticket volume down by account or requester. Customer hotspots drops spam and test tickets, so your top accounts are the real ones. One for the keyboard crowd: hold **Option** for push-to-talk, or tap it for hands-free. ## Charts worth looking at Line charts have lost the white gap that sat at every data point. Hovering highlights the point you're on, and a full-size chart now sits in its own titled card, which helps when one answer carries several. ## Drafts that don't guess When the agent drafts an acknowledgment, it reads your articles first, and it can't claim a feature, price, policy, or timeline that nothing backs up. Found nothing relevant? It acknowledges the message and stops there. These stay drafts for your team. ## Titles that tell you what happened A conversation names itself while the answer is still streaming, something like "Stripe webhook signature verification failing". A title you set by hand always wins. Admins can turn the public agent on or off in **Settings**. ## Zendesk over OAuth Authorize through Zendesk's own login instead of minding an API token, and tokens refresh themselves. Already on a token? Move across without losing your sync settings. See [Zendesk](/integrations/zendesk). **Yolo mode** is now called **Full autonomy**, which describes the toggle rather better. See [Full Autonomy](/support/full-autonomy). ## Article diffs you can actually read Code blocks keep their special characters, ordered lists keep their numbering, and headings stop duplicating themselves halfway down. ## One Slack message, not two Reasoning and answer now arrive together. With [ClickHouse](/integrations/clickhouse) connected, the agent finds and queries your log tables mid-investigation, and shows you the SQL it ran. ## Compare article edits the way you'd read them The **diff** view now renders the whole article: headings, lists, code blocks. Changes show inline, green for an addition, struck-through red for a removal. Before this you got raw HTML tags and a few lines of context, and guessed at the rest. ## ClickHouse joins the logs integrations Add your endpoint, credentials, and database under **Settings → Integrations** and map your columns, without picking a single table up front. See [ClickHouse](/integrations/clickhouse). ## Make the widget sound like you Set your own header title and greeting from the embed snippet: add `headerTitle` and `greeting` to your `Decimal.theme()` call and the widget uses your wording instead of the default. A greeting with no subtitle collapses to a single line. ## Connect Intercom in one click Connecting Intercom is now a **Connect with Intercom** button and an OAuth handshake, with no API key to copy. Already on a key? **Switch to OAuth** swaps it over and keeps your synced history. See [Intercom](/integrations/intercom). ## Attachments survive an escalation Attach a screenshot or a log file to a ticket you escalate and it lands on the Jira issue as a real attachment. They were failing silently as a **415** before. ## Escalations file as the right issue type A ticket tagged **Task** now creates a **Task**, rather than everything landing as a **Bug**. One for the triage queue: readiness checks run first, so an under-specified ticket comes back for detail before an issue exists. ## Hand over your MCP server's tools one at a time After a connection test, check off only the tools the agent may use, with **Select all** if you change your mind. Reopen it later and your choices are already ticked. See [MCP Servers](/integrations/mcp). ## Notion pages inside toggles and columns sync A page shared from inside a toggle, column, or callout used to vanish from both the sync and the shared list. It shows up now. See [Notion](/integrations/notion). ## Decide whether a re-run writes back **Configure Re-run** has a new **Write to external system** checkbox. Leave it clear and the re-run stays local, a scratchpad for trying a different answer. Check it and the result flows to your ticketing system. Your everyday runs still write back automatically. ## Oodle links land in your region Log explorer links point at **US1** or **AP1** instead of a subdomain that never resolved, and the connect screen now has a region picker. See [Oodle](/integrations/oodle). ## Two more log integrations: Render and Sumo Logic Add **Render** under Observability with your **API Key** and the workspace ID starting `tea-`, or **Sumo Logic** with your region and access keys. Either way the agent pulls those logs into an investigation the way it already does for Datadog. See [Render](/integrations/render) and [Sumo Logic](/integrations/sumologic). ## Filter tickets by type and portal visibility The filter dropdown gained **Type**, with a live count beside each one, and **Customer Portal**. Both apply to CSV exports, and both live in the URL, so a filtered view is something you can send a teammate. ## Long links stop breaking a conversation A long URL from a log tool used to spill across the page. It now collapses into a **View link** chip, with the full address on hover, both in Slack and in the app. ## Fewer fields for Oodle, more control over Zendesk Oodle takes two fields now, your instance and an API key, and fetches index patterns itself. On Zendesk, a field picker searches your live field list so you can leave custom fields out of a sync. ## Share a screenshot and the bot reads it Drop an image or a PDF into a Slack thread and the bot looks at it: screenshots through vision, PDFs by pulling out their text, scanned pages as images. A file sent with only a short caption used to be skipped. ## Keep the agent out of a campaign's replies **Support Agent Settings** gained **Skip tickets with these subject lines**. Paste in a phrase from the blast and every reply, `Re:` threads included, waits for a human. Your list stays put if you turn it off. [Stripe](/integrations/stripe) also joined the integrations list this week, so the agent can verify a customer and find the payment a ticket is about. ## Work tickets from Slack Ask the bot for a ticket by ID, or search your tickets without leaving the conversation. ## Auto-close, beyond the pilot Auto-close and auto-acknowledgement opened up past the workspaces that trialled them. API keys moved to **Settings → API Keys**. ## Every agent, configured its own way Tone presets, an on and off switch, and a Tools tab for turning individual tools off. See [Agents](/agents/overview). ## Speak to a widget, read it in English Customers can talk instead of typing, and a reply can carry an English translation beside the original. The KB gap agent picked up write and review agents, so a proposed doc change arrives as a reviewed pull request. See [Automated Pull Requests](/knowledge-base/kb-gap-detection). ## Pull requests beside the ticket that caused them A PR viewer lists pull requests with rendered diffs and links back to the ticket that prompted the work. Ticket pages gained previous and next, so you can work a queue without returning to the list. ## Approve before it goes live Articles gained a visibility selector and nested collections, and routing categories and policies moved to a draft and approval flow. Connect more than one Slack workspace and filter conversations by workspace. Every API route now writes to an audit log. ## Doc gaps become pull requests The KB gap agent shipped with a dry-run mode: what a ticket reveals about your docs arrives as a proposed pull request, rather than a task for someone to remember. ## Slack conversations, in one place Slack conversations got a UI of their own, with an Observability dashboard alongside. # JavaScript API Source: https://docs.decimal.app/chat-widgets/api-reference Control the chat widget programmatically with the Decimal JavaScript API. The widget exposes a global `Decimal` object with the following methods. ## Decimal.boot(options) Manually initializes the widget. Required when using `data-disable-autoboot`. | Parameter | Type | Description | | ------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------- | | `user_token` | string | A signed JWT for authenticated sessions. Required when [identity verification](/chat-widgets/identity-verification) is enabled. | | `metadata` | object | Key-value pairs included with escalation tickets (e.g. account ID, plan type). | ```js theme={null} Decimal.boot({ user_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...', metadata: { account_id: 'id_asdf', plan: 'enterprise', } }); ``` ## Decimal.show(options) Opens the chat widget programmatically. Equivalent to clicking the launcher button. | Parameter | Type | Description | | -------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `presentation` | string | `'modal'` opens the widget as a centered modal with a backdrop instead of the corner popup. Defaults to the standard floating popup. Ignored in sidebar display modes. | ```js theme={null} Decimal.show(); // Open as a centered modal Decimal.show({ presentation: 'modal' }); ``` If called before the widget has finished loading, the open is queued and runs once it's ready. In modal presentation, clicking the backdrop or pressing Esc closes the widget. ## Decimal.hide() Closes the chat widget programmatically. Equivalent to clicking the launcher button again. ```js theme={null} Decimal.hide(); ``` ## Decimal.showButton() / Decimal.hideButton() Show or hide the launcher button without removing the widget. The `data-hide-button` attribute hides it for the whole session; these two toggle it at runtime, so you can drop the launcher on certain pages or reveal it after the user does something. ```js theme={null} Decimal.hideButton(); Decimal.showButton(); ``` The widget can still be opened while the button is hidden by calling [`Decimal.show()`](#decimalshowoptions). ## Decimal.shutdown() Removes the chat widget completely. Call `Decimal.boot()` again to restart from scratch. ```js theme={null} Decimal.shutdown(); ``` ## Decimal.update(options) Updates widget metadata after initialization. Merged with existing metadata and included when escalating to a human. | Parameter | Type | Description | | ---------- | ------ | ------------------------------------------------ | | `metadata` | object | Key-value pairs to merge with existing metadata. | ```js theme={null} Decimal.update({ metadata: { account_id: 'id_asdf', plan: 'enterprise', } }); ``` The widget tracks the current page itself and adds it to metadata as `_pageUrl` and `_pageTitle`, with query strings stripped so tokens and PII don't leak. Single-page-app navigation is picked up too, so route changes need no `update()` call from you. ## Decimal.theme(options) Customizes widget appearance. Can be called before or after `Decimal.boot()`. To reset to defaults, call `Decimal.theme(Decimal.DEFAULT_THEME)`. ```js theme={null} Decimal.theme({ colorScheme: 'dark', primaryColor: '#3B82F6', backgroundColor: '#18181B', textColor: '#FAFAFA', textColorSecondary: '#FFFFFF', textColorMuted: '#A1A1AA' }); ``` ### Colors | Parameter | Description | Default | | -------------------- | ----------------------------------------------------------------- | --------- | | `colorScheme` | `'light'` \| `'dark'` \| `'auto'`. Controls browser color scheme. | `'light'` | | `primaryColor` | Launcher button, user message bubbles, action buttons. | `#18181B` | | `backgroundColor` | Widget background color. | `#FFFFFF` | | `textColor` | Headings, body text, input labels, "Powered by Decimal". | `#18181B` | | `textColorSecondary` | Text on primary-colored elements (user messages, buttons). | `#FFFFFF` | | `textColorMuted` | Timestamps, secondary labels, metadata. | `#71717A` | | `borderColor` | Widget border and internal dividers. | none | Pass `null` for any color to reset it to the component default. ### Position & Size These options only affect the widget container in floating mode, designed for use with `data-hide-button`. All values are CSS strings (e.g. `'20px'`, `'50%'`). | Parameter | Description | Default | | ----------------- | -------------------------- | -------------- | | `width` | Widget width. | `380px` | | `height` | Widget height. | `640px` | | `top` | Distance from top edge. | `unset` | | `bottom` | Distance from bottom edge. | `80px` | | `left` | Distance from left edge. | `unset` | | `right` | Distance from right edge. | `20px` | | `transformOrigin` | Animation origin point. | `bottom right` | ### Button Position Position the launcher button independently from the widget container. | Parameter | Description | Default | | -------------- | --------------------------------- | ------- | | `buttonTop` | Button distance from top edge. | `unset` | | `buttonBottom` | Button distance from bottom edge. | `20px` | | `buttonLeft` | Button distance from left edge. | `unset` | | `buttonRight` | Button distance from right edge. | `20px` | ### Content `theme()` also accepts content overrides for the widget's header and greeting. These can be set here or via [data attributes](/chat-widgets/installation#data-attributes) on the script tag. | Parameter | Description | | ------------------- | ------------------------------------------------------------------------------ | | `headerTitle` | Title shown in the widget header. | | `headerSubtitle` | Subtitle shown under the header title. | | `greeting` | Greeting headline shown on the empty conversation screen. | | `greetingSubtitle` | Text shown under the greeting headline. | | `placeholderText` | Placeholder text shown in the chat input field. Defaults to "Ask anything...". | | `suggestedMessages` | Array of up to 6 prompt strings shown as one-click starters. | ```js theme={null} Decimal.theme({ headerTitle: 'Acme Support', greeting: 'Hi there 👋', greetingSubtitle: 'Ask us anything about your account.', suggestedMessages: [ 'How do I reset my password?', 'Where can I find my invoices?', ], }); ``` # Conversations Source: https://docs.decimal.app/chat-widgets/conversations Review customer chat widget conversations, monitor AI responses, and export conversation data. Open **Conversations** to see what customers are asking your widgets and how the agent answered. Read them regularly and the gaps show up on their own: a question the agent keeps fumbling is an article you haven't written yet. Each row carries the conversation title and its feedback badge, the widget name when you run more than one, the visitor (name or email if they authenticated, otherwise anonymous), and when it was last updated. Search by title or ID. Filter by widget, by feedback, by escalation status, or by whether a [policy](/policies) applied. ## Details Click a conversation to read the full thread. Where a conversation was escalated, the header links to the resulting ticket in both Decimal and the external tool. The info popover holds the widget name, visitor details, domain, and start date. ## Export Click **Export** to download conversations as CSV or JSON. Pick a time period, and narrow to one widget if you want. # Identity Verification Source: https://docs.decimal.app/chat-widgets/identity-verification Authenticate widget users with JWT tokens for verified sessions. Identity verification ties every widget session to a user your backend has already authenticated. With it on, the widget refuses to load without a valid JWT that you signed. With it off, visitors type their own email and name into an identity form. ## Turning It On Open **Chat Widgets → \[your widget] → Security** and turn identity verification on. A JWT signing secret is generated for you.
Use the signing secret on your backend to generate JWTs. Never expose it in frontend code.
## Embed Code with Authentication When identity verification is enabled, use `data-disable-autoboot` and call [`Decimal.boot()`](/chat-widgets/api-reference#decimalbootoptions) with the signed token: ```html theme={null} ``` The key differences from the [standard embed code](/chat-widgets/installation): * `data-disable-autoboot` prevents the widget from loading until a token is provided. * `Decimal.boot({ user_token })` initializes the widget with the signed JWT. You can also pass `metadata` to `Decimal.boot()`, or update it later with [`Decimal.update()`](/chat-widgets/api-reference#decimalupdateoptions). Whatever it holds travels with the ticket when a conversation escalates to a human. ## Server-Side Token Generation Token generation must happen on your backend server where the secret remains secure. ```javascript Node.js theme={null} import jwt from 'jsonwebtoken'; const JWT_SECRET = process.env.DECIMAL_JWT_SECRET; const token = jwt.sign( { email: 'user@example.com', // required name: 'Jane Doe', // optional disable_escalation: false, // optional }, JWT_SECRET, { algorithm: 'HS256', expiresIn: '1h' } ); ``` ```python Python theme={null} import jwt import os from datetime import datetime, timedelta, timezone JWT_SECRET = os.environ["DECIMAL_JWT_SECRET"] now = datetime.now(timezone.utc) token = jwt.encode( { "email": "user@example.com", # required "name": "Jane Doe", # optional "disable_escalation": False, # optional "iat": now, "exp": now + timedelta(hours=1), }, JWT_SECRET, algorithm="HS256" ) ``` ## JWT Claims | Claim | Required | Type | Description | | -------------------- | -------- | ------- | -------------------------------------------------------------------- | | `email` | Yes | string | User's email address. | | `exp` | Yes | number | Token expiration timestamp (Unix seconds). Recommended: 1 hour max. | | `name` | No | string | Display name shown in chat. | | `disable_escalation` | No | boolean | Set to `true` to prevent this user from escalating to human support. | Any other claim you add is stored and lands in the escalation ticket's metadata, which is how account IDs or plan types reach your support team. What the ticket does with them depends on the integration handling the escalation. # Installation Source: https://docs.decimal.app/chat-widgets/installation Add the Decimal chat widget to your website with a simple script tag. ## Embed Code Add this snippet before the closing `` tag of your website: ```html theme={null} ``` Replace `YOUR_WIDGET_ID` and `YOUR_CONFIG_TOKEN` with the values from the widget configuration page, or copy the snippet with the tokens already filled in from **Chat Widgets → Installation**. For authenticated users, see [Identity Verification](/chat-widgets/identity-verification). ## Content Security Policy (CSP) If your site uses a Content Security Policy, add the following directives to allow the widget: ``` script-src https://app.getdecimal.ai frame-src https://app.getdecimal.ai ``` * **script-src**: allows the widget script to load. * **frame-src**: allows the widget iframe to load. ## Data Attributes Configure the widget declaratively by setting attributes on the script tag. Everything except the widget ID is optional. | Attribute | Description | Default | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | | `data-widget-id` | **Required.** The widget's ID from the configuration page. | none | | `data-public-config` | Signed config token from the configuration page. | none | | `data-display-mode` | `floating`, `push-sidebar`, or `overlay-sidebar`. See [Display Modes](#display-modes). | `floating` | | `data-primary-color` | Launcher button and accent color. Overridden by [`Decimal.theme()`](/chat-widgets/api-reference#decimalthemeoptions). | `#18181B` | | `data-hide-button` | Present (no value) to hide the launcher button. See [Hiding the Launcher Button](#hiding-the-launcher-button). | off | | `data-disable-autoboot` | Present (no value) to skip auto-boot so you can call [`Decimal.boot()`](/chat-widgets/api-reference#decimalbootoptions) yourself. Required for authenticated sessions. | off | | `data-header-title` | Title shown in the widget header. | Widget default | | `data-header-subtitle` | Subtitle under the header title. | Widget default | | `data-greeting` | Greeting headline on the empty conversation screen. | Widget default | | `data-greeting-subtitle` | Text under the greeting headline. | Widget default | | `data-placeholder` | Placeholder text shown in the chat input field. | `Ask anything...` | ```html theme={null} ```
By default the widget boots automatically once the page loads. Set `data-disable-autoboot` and call [`Decimal.boot()`](/chat-widgets/api-reference#decimalbootoptions) when you need to pass a `user_token` or `metadata`, once your app knows who the signed-in user is.
## Display Modes Control how the widget appears using the `data-display-mode` attribute: | Mode | Description | | -------------------- | ------------------------------------------------------------ | | `floating` (default) | Chat popup in the corner of the screen. | | `push-sidebar` | Full-height sidebar that pushes page content to the left. | | `overlay-sidebar` | Full-height sidebar on the right that overlays page content. | ```js theme={null} s.setAttribute('data-display-mode', 'push-sidebar'); ``` Sidebar modes show a vertical "Ask AI" tab on the right edge that opens the chat when clicked. The sidebar is resizable by dragging its left edge. ## Hiding the Launcher Button Hide the default launcher button with `data-hide-button`: ```js theme={null} s.setAttribute('data-hide-button', ''); ``` When the button is hidden, use [`Decimal.show()`](/chat-widgets/api-reference#decimalshowoptions) and [`Decimal.hide()`](/chat-widgets/api-reference#decimalhide) to control visibility. Useful for custom trigger buttons or embedding in iframes. ## Customization Customize colors, position, sizing, and content with [`Decimal.theme()`](/chat-widgets/api-reference#decimalthemeoptions). Can be called before or after the widget loads. ```js theme={null} Decimal.theme({ colorScheme: 'dark', primaryColor: '#3B82F6', backgroundColor: '#18181B', textColor: '#FAFAFA', headerTitle: 'Acme Support', }); ``` See the [theme options](/chat-widgets/api-reference#decimalthemeoptions). # Chat Widgets Source: https://docs.decimal.app/chat-widgets/overview Embed an AI-powered support chat on your website so customers can get instant answers from your knowledge base. **Chat Widgets** let you embed a Decimal-powered AI support chat directly on your website. Customers can ask questions and get instant, grounded answers from your knowledge base, without opening a support ticket. Widgets work for both anonymous visitors and authenticated users. ## How It Works When a customer asks a question through the chat widget: 1. The AI agent searches your **public** sources of information for relevant context 2. It generates a response in real time 3. If the issue can't be fully resolved, the customer can **escalate** to create a ticket in your connected ticketing system Add the widget to your site with a script tag. Configure display modes and theming. [Learn more](/chat-widgets/installation) Authenticate users with signed JWTs for verified sessions. [Learn more](/chat-widgets/identity-verification) Control the widget programmatically: boot, show, hide, update metadata, and customize themes. [Learn more](/chat-widgets/api-reference) Review what customers are asking and how the AI agent is responding. [Learn more](/chat-widgets/conversations) Give the agent a [fixed procedure](/policies) to follow for refunds, cancellations, and other requests your team handles the same way every time. ## Creating a Widget Click **Create Widget** to get started. Enter a **name** and optionally specify **allowed domains** (e.g. `example.com`) to restrict where the widget can load. ## Widget Configuration The configuration page is where you manage everything about a widget: * **Logo**: Upload a custom logo for the chat header (recommended: 64x64px, JPEG or PNG) * **Allowed Domains**: Control which domains can load the widget * **Escalation**: Route unresolved conversations to your ticketing system (Plain, Pylon, Linear, or Zendesk) * **Active / Inactive**: Toggle the widget on or off at any time A live preview appears on the configuration page so you can see changes in real time. # Auth0 Source: https://docs.decimal.app/integrations/auth0 Connect your Auth0 tenant to Decimal. ## Connecting Auth0 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Auth0**: Click on the Auth0 integration row to open the configuration modal. 3. **Enter your domain**: Provide your tenant domain (e.g., `your-tenant.us.auth0.com`). 4. **Provide application credentials**: Enter the **Client ID** and **Client Secret** for a machine-to-machine application. 5. **Connect**: Click **Connect** to save and activate the integration.
Auth0's [machine-to-machine guide](https://auth0.com/docs/get-started/auth0-overview/create-applications/machine-to-machine-apps) covers creating the application.
# Azure Log Analytics Source: https://docs.decimal.app/integrations/azure-log-analytics Query Azure Monitor Log Analytics data from Decimal's AI agent for root cause analysis during support ticket investigation. The Azure Log Analytics integration lets Decimal's AI agent query your Azure Monitor logs when investigating support tickets. ## What It Does * **Queries Log Analytics tables** with KQL to find relevant log entries * **Filters logs** by time range, table, and severity * **Correlates log data** with ticket context for root cause analysis ## Setting Up Azure Decimal connects with an Entra ID (Azure AD) service principal that has read-only access to your Log Analytics workspace. Set it up in the Azure portal, then collect four values for the connect form: 1. **Register an app** using Microsoft's [app registration guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app). From the app's Overview page, note the **Directory (tenant) ID** and **Application (client) ID**. 2. **Add a client secret** using the same guide's [add-credentials](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app#add-credentials) steps. Copy the secret **Value** right away: it shows only once, and it's a different field from the Secret ID. 3. **Assign the app the Log Analytics Reader role** on your workspace, following Microsoft's [manage access](https://learn.microsoft.com/en-us/azure/azure-monitor/logs/manage-access) guide (**Access control (IAM) → Add role assignment**). 4. **Get the Workspace ID** from the workspace **Overview** page. It's the **Workspace ID** (Customer ID), a GUID, not the workspace name or resource ID. ## Connecting Azure Log Analytics 1. **Open Integrations**: go to **Settings → Integrations**. 2. **Click Azure Log Analytics**: click the Azure Log Analytics row to open the configuration modal. 3. **Enter your credentials**: the four values from the Azure setup map to the four fields: * **Tenant ID**: the Directory (tenant) ID * **Client ID**: the Application (client) ID * **Client Secret**: the client secret value * **Workspace ID (Customer ID)**: the workspace GUID Decimal Azure Log Analytics connect modal with the four credential fields 4. **Connect**: click **Connect**. Decimal validates the credentials against your workspace and lists the tables the agent can query. Wrong credentials return an error and nothing is stored. *Use a dedicated app registration scoped to only the **Log Analytics Reader** role for best security.* # BigQuery Source: https://docs.decimal.app/integrations/bigquery Query your BigQuery data from Decimal's AI agent for customer insights during support ticket investigation.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20BigQuery) to turn it on.
## What It Does * **Lists the tables** it can reach, so the agent knows what exists before it asks anything * **Queries your data** to answer the customer-specific question a ticket raises * **Stays inside the datasets you pick** ## Connecting BigQuery 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click BigQuery**: Click on the BigQuery integration row to open the configuration modal. 3. **Enter your project**: Provide the **Project ID** to query. 4. **Provide service account credentials**: Enter the **Service Account Email** and **Private Key** from the service account JSON key file. 5. **Connect**: Click **Connect** to save and activate the integration. 6. **Choose datasets**: Check the datasets the agent may query, then save. Selecting all of them leaves every dataset available.
Give the service account read-only access, and narrow the dataset list to what support actually needs.
# Bitbucket Source: https://docs.decimal.app/integrations/bitbucket Connect your Bitbucket repositories to Decimal for AI-powered codebase search during support ticket investigation. ## What It Does Once connected, Decimal: * **Indexes the repositories you select** for intelligent search * **Searches relevant files** when analyzing support tickets * **References specific code** in its investigation responses ## Connecting Bitbucket 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Bitbucket**: Click on the Bitbucket integration row to open the configuration modal. 3. **Authorize Decimal**: Click **Connect Bitbucket**. Bitbucket asks you to grant read access to your workspace and repositories. 4. **Select repositories**: Search the list and check the repositories you want indexed. 5. **Sync**: Click **Sync Selected** to start indexing.
Reopen the Bitbucket row to add repositories later. Unchecking a repository removes it from the index.
# Canny Source: https://docs.decimal.app/integrations/canny Let Decimal's AI agent search your Canny roadmap and feature requests during support ticket investigation. ## What It Does * **Searches your ideas** for the feature request or bug a ticket is really about * **Reports where each one stands**, including status, votes, comment count, and any ETA * **Links back to Canny** so your reply can point the customer at the right post ## Connecting Canny 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Canny**: Click on the Canny integration row to open the configuration modal. 3. **Provide an API key**: Enter your Canny **API key**. 4. **Connect**: Click **Connect** to save and activate the integration.
Canny's [API reference](https://developers.canny.io/api-reference#authentication) covers API key creation.
Before the agent tells a customer something isn't supported, it checks Canny, because the gap is often already tracked with votes from other customers. An open idea is a request rather than a promise, so the agent only quotes a date when the post has one. # Clerk Source: https://docs.decimal.app/integrations/clerk Connect your Clerk instance to Decimal. ## Connecting Clerk 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Clerk**: Click on the Clerk integration row to open the configuration modal. 3. **Provide a secret key**: Enter your Clerk **secret key**. 4. **Connect**: Click **Connect** to save and activate the integration.
Clerk's [API keys page](https://dashboard.clerk.com/last-active?path=api-keys) holds the key.
Once connected, the Clerk row shows how many users the instance has. # ClickHouse Logs Source: https://docs.decimal.app/integrations/clickhouse Query ClickHouse log tables from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Lists your log tables** to find the ones worth querying for a given issue * **Queries logs** to pull the rows related to a support issue * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting ClickHouse Logs 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click ClickHouse Logs**: Click on the ClickHouse Logs integration row to open the configuration modal. 3. **Enter your HTTPS endpoint**: Provide the endpoint for your instance (e.g., `https://your-instance:8443`). 4. **Provide credentials**: Enter the **Username** and **Password** Decimal should connect with. 5. **Name the database**: Enter the database that holds your log tables. 6. **Connect**: Click **Connect** to save and activate the integration.
Use a read-only user. ClickHouse's [console documentation](https://clickhouse.com/docs/en/integrations/sql-clients/sql-console) shows where your connection details live.
# CloudWatch Source: https://docs.decimal.app/integrations/cloudwatch Query AWS CloudWatch Logs from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Queries CloudWatch Log Groups** to find relevant log entries * **Filters logs** by time range, service, and error patterns * **Correlates log data** with ticket context for root cause analysis ## Connecting CloudWatch 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click CloudWatch Logs**: Click on the CloudWatch integration row to open the configuration modal. 3. **Provide AWS credentials**: Enter your AWS **Access Key ID** and **Secret Access Key**. 4. **Select a region**: Choose the AWS region where your CloudWatch Logs are stored. 5. **Connect**: Click **Connect** to save and activate the integration.
Use an IAM user or role with read-only access to CloudWatch Logs for best security.
# Confluence Source: https://docs.decimal.app/integrations/confluence Connect your Confluence site to Decimal and choose which spaces it can read. ## What It Does * **Connects your Confluence site** with an Atlassian API token * **Limits reading to the spaces you pick**, so nothing else in the site is touched ## Connecting Confluence 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Confluence**: Click on the Confluence integration row to open the configuration modal. 3. **Enter your site URL**: Provide your Atlassian site (e.g., `https://your-company.atlassian.net`). 4. **Provide your credentials**: Enter the **Email** for your Atlassian account and an **API Token**. 5. **Connect**: Click **Connect** to save and activate the integration. 6. **Select spaces**: Search the list, check the spaces you want Decimal to read, then click **Save spaces**.
Create the token on Atlassian's [API tokens page](https://id.atlassian.com/manage-profile/security/api-tokens). Reopen the Confluence row to change which spaces are selected.
# Cribl Search Source: https://docs.decimal.app/integrations/cribl Query Cribl Search logs from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Lists your datasets** to find the ones worth searching for a given issue * **Queries logs** with KQL to pull the entries related to a support issue * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting Cribl Search 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Cribl Search**: Click on the Cribl Search integration row to open the configuration modal. 3. **Enter your instance URL**: Provide your Cribl Cloud URL (e.g., `https://myworkspace-org123.cribl.cloud`). 4. **Provide API credentials**: Enter the **Client ID** and **Client Secret** for a Cribl API client. 5. **Connect**: Click **Connect** to save and activate the integration.
Cribl's [authentication guide](https://docs.cribl.io/cribl-as-code/api-auth/) covers API client creation.
# Databricks Source: https://docs.decimal.app/integrations/databricks Query your Databricks lakehouse data from Decimal's AI agent for customer insights during support ticket investigation. ## What It Does * **Queries customer data** stored in Databricks tables and views * **Accesses analytics data** for understanding customer behavior and usage patterns * **Provides data context** to help the agent give more informed responses ## Connecting Databricks 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Databricks**: Click on the Databricks integration row to open the configuration modal. 3. **Enter connection details**: Provide your workspace host, client ID, client secret, and SQL warehouse ID. The integration uses OAuth client credentials for authentication. 4. **Connect**: Click **Connect** to save and activate the integration.
For security, create a service principal with limited permissions and use its client credentials to connect.
# Datadog Source: https://docs.decimal.app/integrations/datadog Query Datadog logs from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Queries logs** to find relevant entries related to a support issue * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting Datadog 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Datadog**: Click on the Datadog integration row to open the configuration modal. 3. **Enter your Datadog site**: Select your Datadog site (e.g., `datadoghq.com`, `datadoghq.eu`). 4. **Provide API and Application keys**: Enter your Datadog **API key** and **Application key**. 5. **Connect**: Click **Connect** to save and activate the integration.
You can create API and Application keys in **Organization Settings** in your Datadog account.
## Required Permissions The **Application key** must be scoped with the following permissions so the agent can read your logs: | Permission | Description | | ---------------------- | -------------------------- | | `logs_read_data` | Required to read log data. | | `logs_read_index_data` | Required to read log data. | # Dialpad Source: https://docs.decimal.app/integrations/dialpad Connect your Dialpad account to Decimal. ## Connecting Dialpad 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Dialpad**: Click on the Dialpad integration row to open the configuration modal. 3. **Provide an API key**: Enter a Dialpad **API key**. 4. **Connect**: Click **Connect** to save and activate the integration.
The key must be an admin API key. Dialpad's [documentation](https://developers.dialpad.com/docs/api-key-generation) covers API key creation.
# Freshdesk Source: https://docs.decimal.app/integrations/freshdesk Import and sync Freshdesk support tickets into Decimal for AI-powered analysis and resolution. ## What It Does * **Syncs tickets** from your Freshdesk account into Decimal * **Writes resolutions back** as comments on the original Freshdesk ticket * **Imports ticket conversations** with all messages and metadata * **Keeps tickets updated** as conversations progress in Freshdesk ## Connecting Freshdesk 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Freshdesk**: Click on the Freshdesk integration row to open the configuration modal. 3. **Enter your Freshdesk domain**: Provide your Freshdesk domain (e.g., `https://yourcompany.freshdesk.com`). 4. **Provide your API key**: Enter your Freshdesk API key. 5. **Connect**: Click **Connect** to save and begin syncing.
You can find your Freshdesk API key under **Profile Settings** in your Freshdesk account.
# GCP Logging Source: https://docs.decimal.app/integrations/gcp Query Google Cloud Logging data from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Queries Cloud Logging** to find relevant log entries for GCP-hosted services * **Filters logs** by time range, service, and severity * **Correlates log data** with ticket context for root cause analysis ## Connecting GCP Logging 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Google Cloud Platform Logs**: Click on the GCP Logging integration row to open the configuration modal. 3. **Provide service account credentials**: Enter your **Project ID** (the service account's home project), **Service Account Email**, and **Private Key** (from the service account JSON key file). 4. **Connect**: Click **Connect** to save and activate the integration.
Create a dedicated service account with the **Logs Viewer** (`roles/logging.viewer`) and **Browser** (`roles/browser`) roles for best security. Grant these at the folder or organization level to discover all accessible projects.
# GitHub Source: https://docs.decimal.app/integrations/github Connect your GitHub repositories to Decimal for AI-powered codebase search during support ticket investigation. ## What It Does Once connected, Decimal: * **Indexes your code** for intelligent search * **Searches relevant files** when analyzing support tickets * **References specific code** in its investigation responses * **Stays up to date** by periodically re-indexing your repositories ## Connecting GitHub 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click GitHub**: Click on the GitHub integration row. You'll be redirected to GitHub's App installation page. 3. **Authorize Decimal**: On GitHub, review the permissions and authorize the Decimal GitHub App for your organization. 4. **Select repositories**: After authorization, you'll be returned to Decimal where you can manage which repositories are indexed.
Repository indexing runs automatically after initial connection. Large repositories may take some time to fully index.
# GitLab Source: https://docs.decimal.app/integrations/gitlab Connect your GitLab repositories to Decimal for AI-powered codebase search during support ticket investigation. ## What It Does Once connected, Decimal: * **Indexes your code** for intelligent search * **Searches relevant files** when analyzing support tickets * **References specific code** in its investigation responses ## Connecting GitLab 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click GitLab**: Click on the GitLab integration row to open the configuration modal. 3. **Enter your GitLab URL**: Provide your GitLab instance URL (e.g., `https://gitlab.com` or your self-hosted GitLab URL). 4. **Provide an access token**: Enter a GitLab Personal Access Token or Group Access Token with `read_api` and `read_repository` scopes. 5. **Select repositories**: Choose which repositories to index from the available list. 6. **Connect**: Click **Connect** to save the configuration and begin indexing.
To generate a Personal Access Token in GitLab, go to **Settings > Access Tokens** in your profile, create a token with `read_api` and `read_repository` scopes, and copy it into the Decimal configuration.
# Incident.io Source: https://docs.decimal.app/integrations/incidentio Check for active Incident.io incidents during support ticket investigation to correlate reported issues with known incidents. ## What It Does * **Checks active incidents** when investigating a support ticket * **Correlates issues** with ongoing incidents to avoid duplicate investigations * **Provides incident context** in the agent's response ## Connecting Incident.io 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Incident.io**: Click on the Incident.io integration row to open the configuration modal. 3. **Provide your API key**: Enter your Incident.io API key. 4. **Connect**: Click **Connect** to save and activate the integration. # Intercom Source: https://docs.decimal.app/integrations/intercom Import and sync Intercom customer conversations into Decimal for AI-powered analysis and resolution. ## What It Does * **Syncs conversations** from your Intercom workspace into Decimal * **Writes resolutions back** as replies on the original Intercom conversation * **Imports message threads** with full conversation history * **Keeps conversations updated** as they progress in Intercom ## Connecting Intercom 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Intercom**: Click on the Intercom integration row to open the configuration modal. 3. **Connect with Intercom**: Click **Connect with Intercom** to be redirected to Intercom's OAuth authorization page. 4. **Authorize**: Review the permissions and authorize Decimal for your Intercom workspace. # Jira Service Management Source: https://docs.decimal.app/integrations/jira Import and sync Jira Service Management tickets into Decimal for AI-powered investigation and resolution. ## What It Does * **Syncs service requests** from Jira Service Management into Decimal * **Writes resolutions back** as comments on the original Jira issue * **Imports issue details** including descriptions, comments, and custom fields * **Keeps issues updated** as they progress through Jira workflows ## Connecting Jira Service Management 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Jira Service Management**: Click on the Jira integration row to open the configuration modal. 3. **Enter your Jira instance URL**: Provide your Atlassian instance URL (e.g., `https://yourcompany.atlassian.net`). 4. **Provide API credentials**: Enter your Atlassian email and API token. 5. **Connect**: Click **Connect** to authenticate your Jira connection. 6. **Select projects**: Choose which Jira projects to sync, then click **Save projects**. ## Creating a Jira API Token 1. Go to [id.atlassian.com/manage-profile/security/api-tokens](https://id.atlassian.com/manage-profile/security/api-tokens) 2. Click **Create API token** 3. Give it a label (e.g., "Decimal Integration") 4. Copy the token and paste it into the Decimal configuration # LaunchDarkly Source: https://docs.decimal.app/integrations/launchdarkly Check feature flag state and targeting rules from Decimal's AI agent during support ticket investigation. ## What It Does * **Looks up a flag** and reports its current state * **Reads targeting rules** to explain who receives which value * **Evaluates a flag for a specific user or context** to confirm what that customer got ## Connecting LaunchDarkly 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click LaunchDarkly**: Click on the LaunchDarkly integration row to open the configuration modal. 3. **Provide an API access token**: Enter a LaunchDarkly **API access token**. 4. **Connect**: Click **Connect** to save and activate the integration. 5. **Select projects**: Check the projects the agent should have access to, then click **Save projects**.
LaunchDarkly's [API documentation](https://docs.launchdarkly.com/home/account/api) covers access token creation.
# Linear Source: https://docs.decimal.app/integrations/linear Bring Linear issues into Decimal as tickets and post the agent's replies back to the issue. ## What It Does * **Imports issues** into Decimal as tickets * **Posts replies and internal notes** back as comments on the issue * **Closes the issue** when the ticket is resolved from Decimal * **Receives escalations** from chat widget conversations as new issues ## Connecting Linear 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Linear**: Click on the Linear integration row to open the configuration modal. 3. **Authorize Decimal**: Click **Connect with Linear** and approve access to your workspace. To connect with a key instead, click **Use API key instead** and paste a Linear API key.
Create the key on Linear's [API settings](https://linear.app/settings/api).
[Ticket Sync](/support/ticket-sync) covers how issues arrive and what to check when one is missing. To route unresolved widget conversations into Linear, see [Chat Widgets](/chat-widgets/overview). # MCP Servers Source: https://docs.decimal.app/integrations/mcp Extend Decimal's AI agent with additional capabilities by connecting predefined or custom MCP servers. ## What It Does * **Extends AI capabilities**: Give the agent access to additional tools * **Custom data sources**: Connect internal APIs or databases the agent can query * **Predefined servers**: Use ready-made configurations for common tools ## Connecting an MCP Server 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click MCP Servers**: Click on the MCP Servers row to open the configuration modal. 3. **Choose a server type**: Select from the list of **predefined servers** or configure a **custom server**. 4. **Configure and connect**: Provide the required configuration for the selected server and click **Connect**. You can test the connection before saving. ## Managing Servers After connecting, the MCP Servers section shows the number of active servers. Click to view, configure, or disconnect individual servers.
Custom servers are enabled per workspace. Anyone can configure one, but the agent only calls its tools once the server is turned on for your workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20custom%20MCP%20servers) to turn it on.
# Notion Source: https://docs.decimal.app/integrations/notion Sync Notion database pages into Decimal's knowledge base to make your documentation accessible to the AI agent. ## What It Does * **Syncs Notion pages** as knowledge base articles in Decimal * **Preserves formatting** including headings, lists, code blocks, and tables * **Keeps articles updated** as content changes in Notion ## Connecting Notion 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Notion**: Click on the Notion integration row to open the configuration modal. 3. **Authorize Decimal**: You'll be redirected to Notion to authorize Decimal to access your workspace. Select the pages and databases you want to share. 4. **Share content in Notion**: In Notion, share the databases or pages you want synced with the Decimal integration. All content shared with Decimal is synced automatically. ## How Sync Works Once connected, Decimal periodically checks your shared Notion databases and pages for new or updated content. Content is extracted, converted to a format optimized for AI search, and added to your knowledge base. Synced articles are tagged with the **Notion** source label in your knowledge base, making them easy to identify and filter.
When you update a page in Notion, the corresponding knowledge base article in Decimal is updated automatically during the next sync cycle.
# Oodle Source: https://docs.decimal.app/integrations/oodle Query Oodle logs and metrics from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Lists your log index patterns** to find the ones worth searching for a given issue * **Queries logs** to pull the entries related to a support issue * **Queries metrics** with PromQL to check what a service was doing at the time * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting Oodle 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Oodle**: Click on the Oodle integration row to open the configuration modal. 3. **Enter your instance**: Provide your Oodle instance ID (e.g., `inst-acme-abc123`). 4. **Provide an API key**: Enter an Oodle **API key**. 5. **Connect**: Click **Connect** to save and activate the integration.
Oodle's [documentation](https://docs.oodle.ai/api/api-keys) covers API key creation.
# Overview Source: https://docs.decimal.app/integrations/overview Connect Decimal to your existing tools to enable AI-powered support ticket investigation and resolution. The more data sources you connect, the more effectively the AI agent can investigate and resolve support tickets. All integrations are managed from **Settings → Integrations** (admin access required). ## Ticketing providers Import tickets from [Zendesk](/integrations/zendesk), [Freshdesk](/integrations/freshdesk), [Plain](/integrations/plain), [Intercom](/integrations/intercom), [TeamSupport](/integrations/teamsupport), or [Pylon](/integrations/pylon). Replies and resolutions post back to the original ticket. Connect [ServiceNow](/integrations/servicenow), [Jira Service Management](/integrations/jira), or [Salesforce](/integrations/salesforce) to work service desk tickets and cases in Decimal. Connect [Linear](/integrations/linear) to bring issues in as tickets and post replies back to the issue, and [Canny](/integrations/canny) to check what's already on the roadmap. ## Connections that improve the agent Connect [GitHub](/integrations/github), [GitLab](/integrations/gitlab), or [Bitbucket](/integrations/bitbucket) to enable code search across your repositories. Sync knowledge articles from [Notion](/integrations/notion) or [Confluence](/integrations/confluence). Query logs and metrics from [Datadog](/integrations/datadog), [CloudWatch](/integrations/cloudwatch), [GCP](/integrations/gcp), [Cribl](/integrations/cribl), [Oodle](/integrations/oodle), [Sumo Logic](/integrations/sumologic), [ClickHouse](/integrations/clickhouse), [Render](/integrations/render), [SigNoz](/integrations/signoz), [incident.io](/integrations/incidentio), or [PagerDuty](/integrations/pagerduty). Query [Snowflake](/integrations/snowflake), [Databricks](/integrations/databricks), or [BigQuery](/integrations/bigquery) for customer data insights. Connect [SendSafely](/integrations/sendsafely) so the agent can read the secure links customers share on a ticket. Connect [Stripe](/integrations/stripe) to verify customers, look up payments, and issue refunds. Connect [Auth0](/integrations/auth0), [Clerk](/integrations/clerk), or [WorkOS](/integrations/workos). Connect [LaunchDarkly](/integrations/launchdarkly) to check flag state and targeting during investigations. Connect [Dialpad](/integrations/dialpad) for call and communication data. Turn on [Solana](/integrations/solana) to look up Mainnet transactions while debugging a ticket. Add an AI support bot to [Slack](/integrations/slack), where it answers questions in the thread your team is already in. Extend the AI agent with [MCP servers](/integrations/mcp) for additional capabilities.
Need an integration that isn't listed? Click **Request** at the bottom of **Settings → Integrations** to let us know.
# PagerDuty Source: https://docs.decimal.app/integrations/pagerduty Check for active PagerDuty incidents during support ticket investigation to correlate reported issues with ongoing incidents. ## What It Does * **Checks triggered and acknowledged incidents** when investigating a support ticket * **Correlates reported issues** with ongoing PagerDuty incidents * **Provides incident context** in the agent's response ## Connecting PagerDuty 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click PagerDuty**: Click on the PagerDuty integration row to open the configuration modal. 3. **Provide your API key**: Enter your PagerDuty REST API key with read-only access. 4. **Connect**: Click **Connect** to save and activate the integration. # Plain Source: https://docs.decimal.app/integrations/plain Connect your Plain workspace to Decimal for ticket syncing, resolution, and chat widget escalation. ## What It Does * **Syncs threads** from Plain into Decimal as support tickets * **Writes resolutions back** as comments on the original Plain thread * **Enables escalation** from chat widgets to create new Plain threads * **Imports thread context** including messages and customer information ## Connecting Plain 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Plain**: Click on the Plain integration row to open the configuration modal. 3. **Provide your API key**: Enter your Plain API key. 4. **Connect**: Click **Connect** to save the configuration. ## Finding Your Plain API Key 1. In Plain, go to **Settings > API Keys** 2. Create a new API key with the necessary permissions 3. Copy the key and paste it into the Decimal configuration ## Webhook Setup Configure a webhook so Decimal picks up thread updates with lower latency as customers reply. 1. **Copy your signing secret** from Plain under **Settings → Request Signing**. Plain workspace HMAC secret under Request signing 2. **Save the secret in Decimal**: open the [Plain integration](https://app.getdecimal.ai/settings?tab=integrations), paste the secret into **Webhook signing secret**, and click **Save webhook secret**. 3. **Create a webhook in Plain** under **Settings → Webhooks** with this URL: ``` https://app.getdecimal.ai/api/webhook/plain ``` Subscribe it to the **Thread** events (`thread.*`) so replies and status changes are delivered. Plain webhook target configured with the Decimal webhook URL ## Chat Widget Escalation Once connected, Plain can be selected as an escalation target for [Chat Widgets](/chat-widgets/overview). When a customer escalates a conversation, a new Plain thread is created with the full chat history. # Pylon Source: https://docs.decimal.app/integrations/pylon Connect your Pylon workspace to Decimal for issue syncing, resolution, and chat widget escalation. ## What It Does * **Syncs issues** from Pylon into Decimal as support tickets * **Writes resolutions back** as comments on the original Pylon issue * **Enables escalation** from chat widgets to create new Pylon issues ## Connecting Pylon 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Pylon**: Click on the Pylon integration row to open the configuration modal. 3. **Provide your API key**: Enter your Pylon API key. 4. **Connect**: Click **Connect** to save the configuration. ## Webhook Setup Configure a webhook for real-time ticket updates when customers reply to issues. 1. **Get a Decimal API key** from [Settings → API Keys](https://app.getdecimal.ai/settings/api-keys). 2. **Create a webhook in [Pylon Webhooks Settings](https://app.usepylon.com/settings/webhooks)** with this URL: ``` https://app.getdecimal.ai/api/external/pylon/webhook ``` Pylon webhook URL configuration 3. **Add an Authorization header** to the webhook: ``` Authorization: Bearer {your_decimal_api_key} ``` 4. **Create a trigger in Pylon**: * **When:** Issue has a new message and message is a reply from customer * **Then:** Send webhook (select the webhook you created) with this payload: ```json theme={null} { "event": "issue.updated", "issue_id": "{{ issue.id }}" } ``` Pylon trigger configuration 5. **Copy the webhook secret** from Pylon and paste it into the **Webhooks** section of the Pylon integration settings in Decimal. Pylon webhook secret ## Chat Widget Escalation Once connected, Pylon can be selected as an escalation target for [Chat Widgets](/chat-widgets/overview). When a customer escalates a conversation, a new Pylon issue is created with the full chat history. # Render Source: https://docs.decimal.app/integrations/render Query Render service logs from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Lists your resources**, including services, cron jobs, and databases * **Queries logs** for the resources relevant to a support issue * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting Render 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Render**: Click on the Render integration row to open the configuration modal. 3. **Provide an API key**: Enter a Render **API key**. 4. **Enter your workspace ID**: Provide the workspace the agent should read from (e.g., `tea-xxxxxxxxxxxx`). 5. **Connect**: Click **Connect** to save and activate the integration.
Render's [API documentation](https://render.com/docs/api) covers API key creation.
# Salesforce Source: https://docs.decimal.app/integrations/salesforce Connect Salesforce Service Cloud to Decimal for AI-powered analysis and resolution of support cases. ## What It Does * **Syncs cases** from Salesforce into Decimal as support tickets * **Writes resolutions back** as comments on the original Salesforce case * **Imports case details** including descriptions, comments, and account information * **Keeps cases updated** as they progress in Salesforce ## Connecting Salesforce 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Salesforce**: Click on the Salesforce integration row to open the configuration modal. 3. **Provide credentials**: Enter your Salesforce connection details as specified in the modal. 4. **Connect**: Click **Connect** to save and begin syncing cases. # SendSafely Source: https://docs.decimal.app/integrations/sendsafely Let Decimal read the secure-link attachments customers share on a ticket. ## What It Does * **Finds SendSafely links** in a ticket and its replies * **Reads what customers sent** through them, so logs and screenshots behind a secure link count as evidence * **Cites them** alongside the agent's other sources ## Connecting SendSafely 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click SendSafely**: Click on the SendSafely integration row to open the configuration modal. 3. **Enter your host**: Provide your SendSafely URL (e.g., `https://yourcompany.sendsafely.com`). 4. **Provide API credentials**: Enter your **API Key** and **API Secret**. 5. **Connect**: Click **Connect** to save and activate the integration.
SendSafely's [REST API guide](https://sendsafely.zendesk.com/hc/en-us/articles/360027599232-SendSafely-REST-API) covers API key creation.
## Redact Secure Content **Redact secure content** is on by default. It strips SendSafely file descriptions out of saved run transcripts, so the agent can read a secure attachment while investigating without that content being kept afterwards. Reopen the SendSafely row to turn it off. # ServiceNow Source: https://docs.decimal.app/integrations/servicenow Connect your ServiceNow ITSM environment to Decimal for AI-powered incident analysis and resolution. ## What It Does * **Syncs incidents** from ServiceNow into Decimal * **Writes resolutions back** as comments on the original ServiceNow incident * **Imports ticket details** including descriptions, comments, and metadata * **Keeps incidents updated** as they progress through ServiceNow workflows ## Connecting ServiceNow 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click ServiceNow**: Click on the ServiceNow integration row to open the configuration modal. 3. **Enter your instance URL**: Provide your ServiceNow instance URL (e.g., `https://yourcompany.service-now.com`). 4. **Provide credentials**: Enter your **Client ID** and **Client Secret** from your ServiceNow Application Registry. 5. **Connect**: Click **Connect** to save and begin syncing incidents. # SigNoz Source: https://docs.decimal.app/integrations/signoz Query SigNoz logs and traces from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Queries logs** from SigNoz to find entries related to support issues * **Searches traces** to identify performance bottlenecks and errors * **Correlates data** with ticket context for faster root cause analysis ## Connecting SigNoz 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click SigNoz**: Click on the SigNoz integration row to open the configuration modal. 3. **Enter your SigNoz endpoint**: Provide the URL of your SigNoz instance API. 4. **Provide an API key**: Enter your SigNoz API key. 5. **Connect**: Click **Connect** to save and activate the integration. # Slack Source: https://docs.decimal.app/integrations/slack Add an AI-powered support bot to your Slack workspace for answering questions using your connected knowledge base and code. ## What It Does * **AI bot in Slack**: Team members can ask the Decimal bot questions in DMs or channels * **Answers from your knowledge base and code**: The bot searches your connected data to answer questions * **Threaded responses**: Answers are delivered as threaded Slack messages ## Connecting Slack 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Slack**: Click on the Slack integration row to open the configuration modal. 3. **Install the Decimal Slack app**: Click the install button to be redirected to Slack's OAuth authorization page. 4. **Authorize**: Review the permissions and authorize the Decimal app for your workspace. After authorization, the Decimal bot will be available in your Slack workspace. You can invite it to channels or message it directly. ## Using the Bot * **DM the bot**: Send a direct message to the Decimal bot with your question * **Mention in a channel**: Mention `@Decimal` in any channel where the bot has been invited * **Threaded conversations**: Reply in a thread to continue the conversation
The Slack bot uses the same AI agent and knowledge base as the rest of Decimal. Any improvements to your knowledge base automatically improve the bot's responses.
# Snowflake Source: https://docs.decimal.app/integrations/snowflake Query your Snowflake data warehouse from Decimal's AI agent for customer data insights during support ticket investigation. ## What It Does * **Queries customer data** to understand the customer's account, subscription, and usage * **Looks up transaction history** or event logs stored in Snowflake * **Provides data context** to help the agent give more informed responses ## Connecting Snowflake 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Snowflake**: Click on the Snowflake integration row to open the configuration modal. 3. **Enter connection details**: Provide your account identifier, warehouse, role, and username. 4. **Provide your private key**: Paste your RSA private key for key-pair authentication. 5. **Connect**: Click **Connect** to save and activate the integration.
For security, create a dedicated Snowflake user with read-only access to the specific tables the AI agent should be able to query.
# Solana Source: https://docs.decimal.app/integrations/solana Let Decimal's AI agent look up Solana Mainnet transactions while debugging a customer's issue.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20Solana) to turn it on.
## What It Does * **Looks up a transaction** on Mainnet by its signature * **Says whether it succeeded**, with the on-chain error when it didn't * **Reports the detail around it**: slot, block time, fee payer, fee paid, and compute units ## Turning On Solana 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Solana**: Click on the Solana integration row to open the configuration modal. 3. Click **Enable**. There are no credentials to enter. Decimal reads public Mainnet data, so nothing is written and no account of yours is connected. # Stripe Source: https://docs.decimal.app/integrations/stripe Connect Stripe to let Decimal's AI agent verify customers, look up payments, issue refunds, and cancel subscriptions during support ticket resolution. ## What It Does * **Verifies the customer** by matching the ticket's email to a Stripe customer before touching any payment * **Looks up payments** to identify the specific charge a ticket is about, by amount, currency, and date * **Issues refunds** against the matched charge, either recommended for human approval or automatically within configured caps * **Cancels subscriptions** at the end of the paid period or right away, under the same approval rules as refunds * **Investigates billing context** for disputes, duplicate charges, and cancellations that imply a refund ## Permissions Decimal Requests Decimal connects with a Stripe **restricted key**. When you create the key, grant exactly these permissions and nothing more: | Permission | Access | What it unlocks | | ------------------------ | ------ | ---------------------------------------------------------------------------------- | | **Customers** | Read | Match the ticket requester to a Stripe customer before anything is read or changed | | **PaymentIntents** | Read | Find the payment a ticket is about, and the charge behind it | | **Charges** | Write | Issue refunds against that charge | | **Subscriptions** | Write | Cancel a subscription, at period end or right away | | **Invoices** | Read | Recent invoices, so a reply can answer "what was I last billed" | | **Coupons** | Read | Read a coupon's terms before the agent puts it in front of a customer | | **Promotion codes** | Write | Mint a single-use code scoped to one customer | | **Products**, **Prices** | Read | Name the plan in a reply, and change plans | The last four aren't in use yet. Grant them with the rest and you won't have to edit the key again when [promo codes](#promo-codes) ship. Stripe restricted key permissions Stripe restricted key permissions
Decimal only accepts restricted keys (`rk_…`). Secret keys (`sk_…`) are rejected. A restricted key keeps access scoped to exactly the permissions above.
### Updating a Key You Already Connected Adding a permission doesn't mean creating a new key. Edit the restricted key in Stripe, open **Settings → Integrations → Stripe**, and click **Test permissions**. Decimal re-reads the key and the badges update. Keys connected before subscription cancellation shipped get re-read on their own, so a key that already carries **Subscriptions: write** works without anyone reconnecting. ## Connecting Stripe 1. **Create a restricted key**: In your [Stripe Dashboard](https://dashboard.stripe.com/apikeys/create), create a restricted key with the permissions listed above. 2. **Open Integrations**: Go to **Settings → Integrations**. 3. **Click Stripe**: Click on the Stripe integration row to open the configuration modal. 4. **Paste your restricted key**: Enter the `rk_…` key and click **Connect**. Connect Stripe modal Connect Stripe modal 5. **Test permissions**: Once connected, use **Test permissions** to confirm the key has the access the agent needs. The badges show which scopes are present, and the two lines under them say whether the key can refund and whether it can cancel subscriptions. Stripe connection status Stripe connection status
The connected mode (Test or Live) is detected from the key. A live-mode key (`rk_live_…`) is required to refund real payments.
## Refund Controls What the agent may do in Stripe is set per agent. Open **Agents**, select **Support Agent**, and go to the **Settings** tab. **Refund Controls** appears there once Stripe is connected, and covers cancellations as well as refunds. The label beside the heading tells you where the agent stands right now: **Off**, **Recommending**, or **Issuing**. Refund controls Refund controls ### Let the agent handle refunds and subscription cancellations Off by default. While it's off, the agent still looks up payments and answers billing questions, but it never changes anything in Stripe and never proposes a change. Turn it on to decide how refunds and cancellations get approved. ### Approval * **Recommend** (default): the agent proposes a refund, a cancellation, or both, and a teammate approves each one from the ticket. Nothing changes in Stripe until someone clicks. * **Issue**: the agent acts through Stripe on its own. A refund goes out when it fits inside both caps below, and falls back to recommending over a cap. A cancellation goes through once the agent has matched the requester to the Stripe customer on the subscription. Approval set to Issue Approval set to Issue
**Issue** needs write access for the action it's taking: **Charges** for refunds, **Subscriptions** for cancellations. With one and not the other, the agent issues what the key allows and leaves the rest for approval. A cancellation can't be approved either until the key has **Subscriptions: write**, so add the permission in Stripe and click **Test permissions**.
### Only admins can approve payment actions On by default: only an organization admin can approve a recommended refund or cancellation. Turn it off and any member can approve one and send it to Stripe. ### Caps Both caps govern refunds the agent issues **on its own**. Neither limits what a person can approve from a ticket, and neither applies to a subscription cancellation. | Cap | Default | Maximum | What happens past it | | -------------------------------- | ------- | ---------- | ------------------------------------------------------------------------ | | **Maximum amount per refund** | \$50.00 | \$1,000.00 | A larger refund is recommended instead of issued | | **Maximum refunds per 24 hours** | 10 | 1,000 | After this many in a 24-hour window, the agent goes back to recommending | ## Approving a Refund The recommendation lands on the ticket for review whenever the agent recommends instead of issuing: on **Recommend**, or on **Issue** when a refund is over a cap. Open **Refund** in the ticket header, confirm the amount, and approve it, and Decimal issues the refund through Stripe. **Skip refund** records the decision and sends nothing. Who's allowed to approve is set by **Only admins can approve payment actions**. Until someone approves it, the agent tells the customer their refund is **under review**, never that it has already been processed. Approve refund on a ticket Approve refund on a ticket ## Cancelling a Subscription A proposed cancellation opens from **Cancel subscription** in the ticket header. The panel names the ticket requester, the email on the Stripe customer, the subscription, and the reason the agent gave, then asks when it should stop: * **At period end** (default): the customer keeps access through the period they've paid for, and it doesn't renew. * **Immediately**: access ends when you approve. Approve it and Decimal sends the change to Stripe. **Skip cancellation** records the decision and leaves the subscription running. If the email on the subscription is different from the one that opened the ticket, the panel says so above the buttons. On **Issue**, that difference stops the agent instead: it won't cancel for a requester it can't tie to the Stripe customer, and the cancellation waits for you. Cancel a subscription from a ticket Cancel a subscription from a ticket ## When a Ticket Asks for Both A ticket that wants a refund and a cancellation gets one button, **Payment actions**, that steps through **Refund payment**, then **Cancel subscription**, then **Send public response**. The header counts where you are, the **Step 1 of 3** and **Step 2 of 3** in the two screenshots above. The two decisions are independent. Skip the refund and still cancel, or refund and leave the subscription running. If what you did differs from what the drafted reply says, the last step warns you before the message goes out, so you can fix the wording. That covers a refund for a different amount than the one drafted, and a cancellation timed differently than the reply describes. ## Promo Codes Coming soon: handing a customer a discount from the ticket. The agent will mint a single-use promotion code scoped to that one customer, from a coupon you've allowlisted, and apply or remove a discount on a subscription.
Promo codes aren't available yet. Grant **Coupons: read** and **Promotion codes: write** on the restricted key now and the agent picks them up when they ship.
# Sumo Logic Source: https://docs.decimal.app/integrations/sumologic Query Sumo Logic logs from Decimal's AI agent for root cause analysis during support ticket investigation. ## What It Does * **Queries logs** to find the entries related to a support issue * **Correlates data** with ticket context for more accurate root cause analysis ## Connecting Sumo Logic 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click Sumo Logic**: Click on the Sumo Logic integration row to open the configuration modal. 3. **Select your region**: Choose the deployment your account lives in (e.g., US1, EU, AU). 4. **Provide access keys**: Enter your **Access ID** and **Access Key**. 5. **Connect**: Click **Connect** to save and activate the integration.
Sumo Logic's [documentation](https://help.sumologic.com/docs/manage/security/access-keys/) covers access key creation.
# TeamSupport Source: https://docs.decimal.app/integrations/teamsupport Import and sync TeamSupport B2B support tickets into Decimal for AI-powered investigation and resolution. ## What It Does * **Syncs tickets** from your TeamSupport account into Decimal * **Imports ticket conversations** with customer and agent messages * **Keeps tickets updated** as they progress in TeamSupport ## Connecting TeamSupport 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click TeamSupport**: Click on the TeamSupport integration row to open the configuration modal. 3. **Enter your connection details**: Provide your Base URL (e.g., `https://yourcompany.teamsupport.com`), Username, and Password. 4. **Connect**: Click **Connect** to save and begin syncing tickets. # WorkOS Source: https://docs.decimal.app/integrations/workos Connect your WorkOS environment to Decimal. ## Connecting WorkOS 1. **Open Integrations**: Go to **Settings → Integrations**. 2. **Click WorkOS**: Click on the WorkOS integration row to open the configuration modal. 3. **Provide an API key**: Enter your WorkOS **API key**. 4. **Connect**: Click **Connect** to save and activate the integration.
WorkOS's [API keys page](https://dashboard.workos.com/api-keys) holds the key.
# Zendesk Source: https://docs.decimal.app/integrations/zendesk Connect Zendesk with OAuth to import and sync support tickets into Decimal for AI-powered analysis and resolution. ## What It Does * **Syncs tickets** from your Zendesk account into Decimal * **Writes resolutions back** as comments on the original Zendesk ticket * **Imports ticket conversations** including all messages, attachments, and metadata * **Keeps tickets updated** as new messages are added in Zendesk
Connect while signed into Zendesk as an **admin**. Zendesk limits ticket export to admins, so Decimal refuses any other account type. If that admin later loses access, sync stops until someone else reconnects.
## Connecting Zendesk 1. **Sign into Zendesk as an admin** in a browser tab. Being an admin in Decimal is not the same thing. 2. **Open Integrations**: Go to **Settings → Integrations**, then click the **Zendesk** row. 3. **Enter your subdomain**: just `acme` for `acme.zendesk.com`, with no `https://` or `.zendesk.com`. Connect Zendesk modal 4. **Click Connect with OAuth**. Zendesk asks you to grant read access to tickets, users, organizations, and help center content, and write access to tickets and help center articles. Click **Allow**. Zendesk OAuth approval screen 5. **You'll land back in Decimal**, connected. Zendesk integration connected Reopening the Zendesk row now shows sync status and lets you narrow what gets synced: exclude custom fields, limit processing to specific Zendesk groups, or exclude tickets matching a rule. ## Why OAuth Instead of an API Token Zendesk is [retiring API tokens](https://developer.zendesk.com/documentation/authentication/oauth-migration/): they never expire, can't be scoped to specific endpoints, and work for anyone holding the token and its email address. OAuth is short-lived, renews itself, and is scoped to the access you approve. | Date | What happens | | ---------------- | ------------------------------------------------------------------------------ | | July 28, 2026 | New Zendesk accounts can't create tokens; tokens unused for 30 days deactivate | | October 27, 2026 | Existing accounts can't create new tokens | | April 30, 2027 | All remaining tokens are permanently deactivated |
**Already connected with an API token?** It keeps working, and OAuth is now the only way to create a new connection. Use **Switch to OAuth** in the Zendesk panel before April 30, 2027.
## Troubleshooting | What you see | What to do | | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | Admin access is required to connect Zendesk | Sign into Zendesk as an admin in the same browser, then connect again | | This integration is experiencing issues and tickets can't be synced | Zendesk rejected the authorization and sync is paused. Click **Reconnect** in the Zendesk panel | | That subdomain looks wrong | Enter only the subdomain, with no `.zendesk.com` or `https://` | | Authorization declined or timed out | Start again from the Zendesk panel and approve in Zendesk | | Connected, but no new tickets | Check the Zendesk panel for an amber notice, then contact [support@getdecimal.ai](mailto:support@getdecimal.ai) | # What is Decimal? Source: https://docs.decimal.app/introduction Decimal is an AI support agent that investigates and resolves customer issues using your codebase, knowledge base, and connected tools. ## How It Works Link your code repositories, ticketing systems, observability platforms, and knowledge sources. The more context Decimal has, the better it resolves issues. Tickets flow in from your connected ticketing integrations (Zendesk, Intercom, Plain, Pylon, and others) or through a chat widget embedded on your site. The agent searches your codebase, queries logs and metrics, and references knowledge base articles to understand the issue and identify a resolution. Decimal produces a detailed **investigation** for your team and a **customer-facing response** ready to send, both with full source citations. ## Explore the Docs View, filter, and manage tickets. Deploy the AI agent to investigate issues and generate responses. [Learn more](/support/overview) Curate the articles that power the AI agent. Auto-generated from resolutions, synced from help centers, or authored manually. [Learn more](/knowledge-base/overview) Embed AI-powered support on your website. Customers get instant answers from your knowledge base. [Learn more](/chat-widgets/overview) Ask questions interactively and get grounded answers from your codebase and knowledge base. [Learn more](/playground/overview) Connect repositories, ticketing, observability, ITSM, and data warehouse tools. [Learn more](/integrations/overview) Programmatic access to Decimal for creating tickets, running the agent, and managing resources. [Learn more](/api-reference) ## Getting Started
Already have access? Sign in at [app.getdecimal.ai](https://app.getdecimal.ai) and connect your first integration to get started.
Interested in trying Decimal? [Book a demo](https://cal.com/decimal-demo/30m) with our team to see it in action. # Creating Articles Source: https://docs.decimal.app/knowledge-base/creating-articles Create knowledge base articles manually, import from files, or let the AI generate them. Open the **New Article** dropdown on the Knowledge Base page. Everything below starts there. ## Manual Creation The article editor opens. Titles are how the agent finds the article mid-investigation, so name the problem the article solves. The editor takes headings, lists, code blocks, and links. Click **Create Article**. The agent can use it right away.
Write the way you'd explain the thing to a colleague who asked.
## Importing from Files The upload dialog opens. Pick a file from your computer. The file name is offered as a starting point. Click **Import Article** to process the file and create the article. ### Supported File Formats | Format | Extensions | | ------------------------ | --------------- | | PDF | `.pdf` | | Markdown | `.md` | | Plain Text | `.txt` | | Word | `.docx` | | Excel | `.xlsx`, `.xls` | | OpenDocument Spreadsheet | `.ods` | | OpenDocument Text | `.odt` | | CSV / TSV | `.csv`, `.tsv` | | HTML | `.html`, `.htm` | | Rich Text | `.rtf` | | JSON | `.json` | | YAML | `.yaml`, `.yml` | ## AI-Generated Articles When the agent resolves a ticket, you can keep the resolution as an article. Open the ticket on the **Support** page and click **Save to Knowledge Base** in the agent response panel. The Playground works the same way: save a useful answer straight from the conversation. Either route creates the article with **In Review** status, so someone reads it before it goes live. See [Manage Articles](/knowledge-base/manage-articles). ## Notion Sync Connect the [Notion integration](/integrations/notion) and articles from the databases you select sync into your knowledge base. # Automated Pull Requests Source: https://docs.decimal.app/knowledge-base/kb-gap-detection Decimal automatically creates pull requests to keep your documentation up to date based on what your support team encounters. When a ticket turns up something your docs don't cover, Decimal's KB Gap Detection agent opens a pull request against your documentation repository. It reads the repo first to learn your structure and conventions, finds the right file or decides where a new one belongs, writes the content in your existing tone, and opens the PR for review. Every change arrives as a pull request. The agent never commits to your main branch.
KB Gap Detection requires a connected [GitHub integration](/integrations/github). To create real pull requests, install the **GitHub Write** app from **Settings → Integrations**. With only the standard read-only app, the agent runs in preview mode and shows proposed changes without creating PRs.
## What the Agent Changes The agent creates a new article when a support topic has no coverage at all, matching your repo's format and adding the page to your navigation config so it shows up in the sidebar. When a topic is covered but thin, it edits the existing file instead, adding the missing detail without reflowing the text around it. It reads and writes `.md`, `.mdx`, `.rst`, and `.json`. Code files are out of reach. ## How Gaps Are Found Every resolved ticket is compared against your knowledge base. If the agent had to explain something undocumented, or found existing docs incomplete, that's a gap. Gaps are only acted on when the analysis is confident. An uncertain read proposes nothing. ## Triggering the Agent Open a resolved ticket on the **Support** page, open the **More actions** menu in the ticket header, and click **Analyze Gap**. The agent runs in the background and opens a PR when it finishes. ## Reviewing Pull Requests The PR title uses a Conventional Commits prefix, such as `docs: add rate limiting documentation`. The body summarizes what changed, the support context that revealed the gap, and links back to the source ticket. Review the diff, comment, request changes, and merge as you would on any PR. ## Customizing the Writing Keep a style guide in your repository and the agent reads it before writing, so generated content follows your terminology and formatting. Email [support@getdecimal.ai](mailto:support@getdecimal.ai?subject=KB%20Gap%20style%20guide) to point it at the right path. Without one, the agent still reads your existing files and matches what it finds: frontmatter fields, heading style, `.mdx` against `.md`, directory naming, and your navigation config, whether that's Mintlify, Docusaurus, or Fern. ## Safeguards | Safeguard | What it prevents | | ------------------------ | ------------------------------------------------------------------------- | | **Confidence threshold** | Low-confidence gaps are skipped rather than drafted | | **Duplicate detection** | An open PR covering the same gap stops a second one | | **Rate limiting** | A cap on new PRs per day keeps your repo from filling up | | **File restrictions** | Only documentation files can be touched, never code or binaries | | **Read-only fallback** | Without the GitHub Write app the agent previews instead of failing | | **Content rules** | Internal implementation details, secrets, and sensitive data block the PR | ## Connect the GitHub Write App The standard GitHub integration is read-only, which is all code search needs. Opening pull requests takes the GitHub Write app: 1. Go to **Settings → Integrations** 2. Click **GitHub Write** and follow the authorization flow 3. Select which repositories the agent can write to # Manage Articles Source: https://docs.decimal.app/knowledge-base/manage-articles Edit, review, publish, and archive knowledge base articles, and control their public or private visibility. Click any article in the Knowledge Base list to open it. Everything below happens from the actions panel on that page. ## Editing Articles Click **Edit**, make your changes in the editor, and click **Save**. The updated version publishes immediately. ## Reviewing Articles New articles arrive with **In Review** status. Read the content, then **Approve** to publish it or **Reject** to discard it. ## Public Articles **Public** articles can be referenced by customer-facing [chat widgets](/chat-widgets/overview) and by the [public agent](/agents/public-agent) when the AI answers a question. Everything else stays internal. Click **Make public** or **Make private** to switch. *Investigation details and anything sensitive should stay private. Once an article is public, a customer can see what it says.* ## Notes Notes attach below an article's content, for context or a correction you want recorded without editing the article itself. ## Archiving Articles **Archive** takes an article out of search results and out of the agent's answers. Rejecting an article during review does the same thing. You can also **Export PDF** to download the article, and **View source** to open its original URL when it has one. # Knowledge Base Source: https://docs.decimal.app/knowledge-base/overview Browse, search, and manage the self-updating article library that powers Decimal's AI agent responses. Your articles are what the agent reads when it resolves a ticket, answers a question in the [Playground](/playground/overview), or replies through a [chat widget](/chat-widgets/overview). The more you cover, the better those answers get. Most of the library fills itself. Articles are written from ticket resolutions, synced from your connected help centers and doc sites, and updated as your codebase changes. Write one in the editor, import a file, or let the agent write it from a resolution. [Learn more](/knowledge-base/creating-articles) Edit, review, publish, and archive articles, and control whether customers can see them. [Learn more](/knowledge-base/manage-articles) ## Article Sources | Source | Description | | ---------------------- | ---------------------------------------------------------------------- | | **Manual** | Created directly in the Decimal editor | | **File Import** | Uploaded from PDF, Markdown, Word, Excel, CSV, HTML, and other formats | | **AI-Generated** | Written from AI agent resolutions on support tickets | | **Playground** | Saved from a Playground answer | | **Documentation Sync** | Synced from your connected help center or doc site | | **Integration Sync** | Synced from a connected tool such as [Notion](/integrations/notion) | | **Codebase** | Generated from your connected repositories and code changes | ## Browsing Articles Articles are listed newest first. Search by title or content, and filter by status, category, source, author, date range, or visibility. Anything marked **In Review** hasn't been published yet. [Manage Articles](/knowledge-base/manage-articles) covers reviewing those. # Ask Data Source: https://docs.decimal.app/playground/ask-data Ask about your support data in your own words and get counts, charts, and tables back.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20Ask%20Data) to turn it on.
Open the [Playground](/playground/overview) and ask about your support data in your own words, or ask the same thing in [Slack](/integrations/slack). Answers come back with charts and tables where they help, and the tickets behind them. Questions can draw on your ticket history, your chat widget conversations, and the themes running through both. A question answered with a breakdown and sample tickets A question you ask often can be saved and reused. See [Formulas](/playground/formulas). # Formulas Source: https://docs.decimal.app/playground/formulas Save the questions your team asks often and reuse them from the Playground composer. A formula is a saved prompt. Anything you find yourself typing again, a weekly volume check or a monthly theme review, can be saved once and reused. Type `/` in the composer to insert one, then send it as it is or add to it before you do. A formula answered with a chart and a table ## Managing Formulas Your workspace's formulas live under **Settings → Formulas**, where you can add, edit, and remove them. Anyone on the team can create one, and they're shared across the workspace. The Formulas list in settings # Playground Source: https://docs.decimal.app/playground/overview Explore your codebase and knowledge base interactively through a free-form AI chat interface. The Playground runs the same agent that resolves your tickets, without a ticket attached. Use it to dig through the codebase, find what the knowledge base already says, or think through a problem before it becomes a ticket. It also answers questions about your own support history, like volumes, themes, and trends. See [Ask Data](/playground/ask-data). It's a good place to point a new teammate, too. They can ask about the codebase and the product without having to work out who to ask. ## Asking a Question Add or remove **repositories** to control which codebases the agent searches. Use **@ mentions** to pin a ticket or knowledge base article. Type your question and press **Enter**. Attach screenshots, log files, PDFs, or recordings when the words alone won't do it. Follow-ups build on everything said so far. A question you ask often can be saved and reused. See [Formulas](/playground/formulas). ## Working with Answers * **Sources**: every source behind the answer, grouped by type * **View Reasoning**: the agent's investigation, step by step * **Copy**: the full response to your clipboard * **Save as knowledge article**: turns the answer into an article with **In Review** status Under each answer, **Yes** or **No** on "Was this helpful?" tells the Decimal team where the agent is falling short. Comments help more than the rating alone. ## Conversation History Conversations save themselves. Click **History** in the context bar to reopen one, or press **⌘+Shift+K** on Mac, **Ctrl+Shift+K** on Windows and Linux. # Policies Source: https://docs.decimal.app/policies Make the Chat Widget agent follow your exact procedure for refunds, cancellations, and anything where the order of the questions is the process.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20Policies) to turn it on.
A policy is the procedure you'd hand a new teammate for one kind of request. Ask for the order number. Always mention the 30 day window. Refund under 30 days, store credit up to 60, decline past that. Write that once in **Policies** and the [Chat Widget agent](/agents/chat-widget) follows it step by step whenever a customer opens that subject, in the widget or through the [Chat API](/api-reference). Without a policy the agent answers from your [knowledge base](/knowledge-base/overview) and picks its own way through the conversation. That's right for "how do I export a report". Refunds and cancellations are different: the wording and the order of the questions are the process, and you want them the same every time. Open **Configuration → Policies**.
Only organization administrators can open **Policies**.
The Policies list ## Creating a Policy Click **Create policy** and pick where to start: * **Describe in plain English**: type what should happen and Decimal drafts the steps for you to edit. Write it the way you'd brief a teammate, branches included: "if the item arrived damaged, refund it whatever the order age". * **Build from scratch**: an empty editor, for when you already know the shape. * **Upload a document**: drop in the SOP you already wrote. PDF, DOCX, TXT, and MD, up to 10 MB. All three land in the same editor, and nothing is saved until you click **Create policy**. The three ways to start a policy Give the policy a **Name**, a one line **Description** of what it covers, the **Activation triggers** that bring it into play, and then the steps. ## Steps A step is one instruction. Its type sets how the agent reads it. | Step | What the agent does | | ------------------------- | ------------------------------------------------------------------------------------------ | | **Acknowledge** | Opens with your acknowledgment, phrased naturally | | **Key Information** | Covers every topic you list, in every conversation. Nothing here can be skipped | | **Ask Questions** | Asks the customer each question | | **Search Knowledge Base** | Looks up what you describe, then uses what it finds in the steps below. Needs **Tools** on | | **Instructions** | Works through a numbered procedure | | **Condition** | Runs its content when the condition holds. When it can't tell, it asks the customer | | **Switch** | Runs the first case that matches, and only that one | | **Escalate** | Collects what you specify and hands the conversation to your team | | **Resolve** | Delivers a closing message and ends the conversation. Nothing after it runs | The policy editor, with a Switch step open ### Writing Steps the Agent Can Follow Collapse a run of conditions into one **Switch** when only one of them can be true. Under 30 days, 31 to 60, over 60: that's one **Switch** with three cases, not three **Condition** steps. Keep each condition to a short label of a few words, the way you'd tab a folder. "Order over 60 days". "Damaged on arrival". What to do about it goes in the step's content, never in the condition. Customers never see condition text, and the agent won't repeat it back to them. Then cut. A handful of steps that each carry a real decision beat a long list of small ones. Drag the handle on a step to reorder, and read the result top to bottom: that's the order the agent works in. ## Triggers and Matching Triggers are comma-separated phrases in your customers' words, not your internal ones: `refund, money back, return, cancel my order`. Decimal reads each conversation against the triggers, description, and steps of every active policy, and applies one only when the match is clear. When nothing matches clearly, the agent answers as it normally would. That check runs on every message, so a chat that opens with "hi, quick question" picks the policy up two messages later once the customer says what they want. One policy applies at a time. Keep policy scopes apart: when two policies could both cover the same request the match gets less certain, and an uncertain match means neither is applied. To see whether a policy fired, open **Conversations**. A policy icon sits beside the title of every conversation where one applied, and hovering it names the policy. The **Policy** filter narrows the list to conversations with or without one. ## Tools **Tools**, on the policy's page, decides whether the agent may search your knowledge base while following the policy. Off, the agent works from the policy text alone and cites nothing. On, it can look articles up and cite them in the reply, and a **Search Knowledge Base** step starts working. Either way a policy conversation stays out of your connected code repositories, which a normal widget conversation can search. A saved policy, showing its triggers and numbered steps ## Escalating from a Policy An **Escalate** step hands the conversation to your team through the widget's escalation integration. The agent collects what the step asks for, opens the escalation form, and the ticket is created for you. Configure escalation on the widget first, under **Escalation** in its [configuration](/chat-widgets/overview). Without it the agent still gathers the information and tells the customer someone will follow up, but no ticket is created. The agent stays the support agent throughout. It won't tell the customer it's passing them to a human, point them at a support email, or say their case is an exception. ## Turning a Policy On and Off A new policy goes live the moment you create it. Switch **Active** off on its page to park it while you keep working, and it stays out of every conversation until you switch it back. Edits save as you type, confirmed by an **Auto-saved** toast. There's no publish step: the next customer message uses what you just changed, including in a conversation already underway.
**Delete policy**, in the **⋯** menu, can't be undone.
## Read-Only Policies A workspace that syncs workflows in from another tool gets those as policies too, marked **Read-only**, with a **Source** column in the list naming where each came from. Edit those in the tool they came from. # Full Autonomy Source: https://docs.decimal.app/support/full-autonomy Let Decimal's AI agent send its own replies to customers, gated by a verifier and the guardrails you set.
This feature is enabled per workspace. [Email us](mailto:support@getdecimal.ai?subject=Enable%20Full%20autonomy) to turn it on. A **Contact support** button where the toggle should be means it isn't on yet.
You control how far to take it, from watching what the agent *would* send to letting it reply live. Nothing goes out until it clears every check.
Full Autonomy is about the **private** agent's drafts, the ones built from everything you've connected. If you're looking for the separate agent that answers customers from your public documentation alone, that's the [public agent](/agents/public-agent). The two work independently, and [Public Agent vs Full Autonomy](/agents/public-agent#public-agent-vs-full-autonomy) lays out the difference.
## What It Does * **Sends replies automatically**: posts the agent's drafted reply to the customer when it clears every check, with no one in the loop * **Checks every reply first**: an independent verifier reviews each reply and holds back anything unsafe before it reaches the customer * **Runs your guardrails**: enforces conditions you write yourself, on top of the always-on safety checks * **Stands down for humans**: if a teammate has already replied on a ticket, the agent won't send * **Starts in Preview**: drafts replies as internal notes so you can see what it would send before it sends anything for real Full Autonomy is configured for **Support Agents**. Open **Agents**, select **Support Agent**, and go to the **Replies** tab. Full Autonomy on the Replies tab ## Preview vs Live Full Autonomy has two delivery modes. Switch between them with the **Delivery** control. * **Preview** (default): the agent drafts a reply and posts it as an **internal note** on the ticket, so you can see exactly what it would send. Nothing reaches the customer. * **Live**: the agent **sends its own replies to customers** whenever every check passes. You won't review them first. Preview and Live delivery modes
Start in **Preview**. Let the agent draft against real tickets for a while and read what it would have sent. Once the drafts look right, switch **Delivery** to **Live**.
## Guardrails A reply is **never sent to the customer** if any guardrail trips. ### Always On These safety checks apply to every reply and can't be turned off: | Check | What it holds back | | --------------------------- | ----------------------------------------------------------------- | | **Fabricated claims** | A claim that's contradicted by the evidence or can't be backed up | | **Unsupported promises** | A promise to take an action the agent can't actually take | | **Someone else's data** | Anything that exposes data belonging to anyone but the requester | | **Confidential disclosure** | Internal or confidential company information | ### Your Checks Write your own conditions as sentences. For example, *"the reply approves a refund over \$500"* or *"the reply commits to a specific delivery date."* Each check has a **name** and a **Block auto-send when…** condition. You can add up to 20. Guardrails and custom checks ### Confidence Threshold Beyond the pass/fail guardrails, the verifier scores how confident it is that a reply is safe and complete. Full Autonomy only sends when that confidence is at or above your **confidence threshold**, which is **80%** by default. Raise it to be more cautious. You'll find it under **Advanced**. ## Ticket Eligibility By default, every ticket is eligible for auto-send. Under **Advanced**, you can narrow that with **Only send** and **Never send** rules by **channel** or **tag**. For instance, only auto-send tickets from a specific channel, or never auto-send anything tagged `vip`. Leave it empty to consider every ticket. Advanced settings: confidence threshold and ticket eligibility ## Turning On Full Autonomy 1. **Open the Replies tab**: Go to **Agents**, select **Support Agent**, and open the **Replies** tab. 2. **Turn on Send replies automatically**: Full Autonomy starts in **Preview**, so the agent drafts replies but sends nothing to customers. 3. **Review your guardrails**: Check the always-on list and add any of **your checks** for your team's policies. 4. **Set your thresholds (optional)**: Under **Advanced**, adjust the confidence threshold and add ticket-eligibility rules. 5. **Watch Preview on real tickets**: Read the internal-note drafts the agent posts and confirm they're what you'd send. 6. **Switch to Live**: When you're confident, set **Delivery** to **Live** and the agent begins sending its own replies.
Full Autonomy needs a standalone customer reply, so while it's on, **Drafted reply** stays enabled under [Reply content](/support/reply-content) and any notes post separately.
## When a Reply Is Held Back If any guardrail trips, or the verifier's confidence sits below your threshold, the reply is **not sent to the customer**. The draft posts as an internal note instead, and the ticket waits for your team like any other. The agent also stands down when a teammate has already replied. It won't send over a human. An internal note holding the reply the agent would have sent # Support Source: https://docs.decimal.app/support/overview View, filter, and manage customer support tickets from your connected ticketing integrations or created manually. The **Support** page is the central hub for managing customer support tickets. Tickets flow in from your connected ticketing integrations (Zendesk, Intercom, Plain, Pylon, and others) and can also be created manually. Deploy the AI agent, review its investigation and customer-facing response, and take action. [Learn more](/support/ticket) Which tickets sync from your ticketing tools, how to [import one by ID](/support/ticket-sync#import-ticket), and what to check when one doesn't arrive. Set where **Support** opens, what the **For you** view holds, and your [reply signature](/support/preferences). ## Ticket List The support page displays all tickets in a sortable, filterable table. Each row shows the ticket title, customer, assignee, state, created date, and last updated date. Use the search bar to find tickets by ID, title, or content. Filter by state, assignee, customer, source, tags, agent status, and date range. ## Creating Tickets Click **New Ticket** in the top-right corner to open a form where you can enter the ticket title, description, type, priority, and customer name. Admins get a dropdown beside it with **Import ticket**, which pulls an existing Zendesk, Jira, or Intercom ticket in by its ID. See [ticket sync](/support/ticket-sync#import-ticket). ## AI Agent Status Each ticket shows a colored indicator reflecting the AI agent's progress: | Indicator | Meaning | | ------------------ | -------------------------------------------- | | *No indicator* | Agent has not been run on this ticket | | **Blue (pulsing)** | Agent is currently analyzing the ticket | | **Green** | Agent has completed its analysis | | **Purple** | Response has been written back to the ticket | # Preferences Source: https://docs.decimal.app/support/preferences Set where Support opens, what the For you view holds, and the signature on your replies. Open **Settings → Preferences**. Everything on this page applies to you alone, so changing it doesn't affect your teammates. ## Default Ticket View Pick what you see when you open **Support**: **For you** or **All**. You can switch views on the page any time. ## For You Filters These decide which tickets the **For you** view holds. Out of the box, it's open tickets assigned to you. Build any filter you'd build on the ticket list: status, assignee, customer, type, tag, agent status, response count. Dates are the exception, since a **For you** view holds what's open now rather than a fixed window. Edits save as you make them. **Reset to default** brings back the original two conditions, and clearing every condition sends you to **All tickets** instead. ## Your Reply Signature Goes at the end of replies you send to customers. You start on the organization default, which an admin sets under **Settings → About**. Edit it and it becomes yours, with **Reset to organization default** to go back. Type `{{` where you want a name, or click **Insert variable**: | Variable | Renders as | | --------------------- | ------------------------ | | `{{user.first_name}}` | Your first name | | `{{user.last_name}}` | Your last name | | `{{user.full_name}}` | Your first and last name | The preview below the box fills those in with your own name, so you can read the signature the way your customer will. You get 1,000 characters, counted in the corner, and the box saves on its own. The reply signature editor, with a variable in the box and the rendered name in the preview below ## Account **Manage account** opens your profile, where you change your name, email, and security settings. # Reply Content Source: https://docs.decimal.app/support/reply-content What the agent posts on a ticket, how the investigation summary is shaped, and how to append the sources behind an answer. Open **Agents**, select **Support Agent**, and go to the **Replies** tab. **Reply content** is the section at the top. Reply content on the Replies tab ## What the Agent Posts The agent writes two things to a ticket, both visible in [Ticket Detail](/support/ticket#reading-the-answer): * **Drafted reply**: the customer-facing answer, written the way your team would send it. * **Investigation summary**: what the agent found while working the ticket, written for your team rather than the customer. The drafted reply is also what gets sent when [Full Autonomy](/support/full-autonomy) is live. ## Shaping the Investigation Summary The summary follows the sections in your investigation template, which you edit on the **Investigation Format** tab. Change the sections there and publish, and the agent uses the published template on its next run. ## Include Sources Turn on **Include sources** to append the knowledge base articles and code references the agent used to reach its answer. ## Signature **Signature** rules decide what goes at the bottom of a reply. Each rule reads as a sentence you assemble from dropdowns: when a given agent replies, optionally narrowed to certain [routing categories](/agents/routing) or channels, sign as one or more teammates, with custom text you write, or with no signature at all. Rules are read top to bottom and the first match wins, so specific rules belong above general ones. Each has its own switch, and you can keep up to 20. Signing as a teammate uses that person's [reply signature](/support/preferences#your-reply-signature). Pick several and Decimal resolves one per ticket, stably, so a thread keeps the same signer from the first reply to the last. Rules are written per agent. See [How its replies are signed](/agents/public-agent#how-its-replies-are-signed) for what this means once the [public agent](/agents/public-agent) is answering customers directly. # Ticket Detail Source: https://docs.decimal.app/support/ticket Deploy the AI agent on a ticket, review its investigation and customer-facing response, and take action on the results. Open any ticket to see the conversation thread and Decimal's AI agent side by side. ## Running the Agent The agent starts on its own when a ticket arrives from your ticketing system. It reads the ticket, pulls evidence from your codebase, logs, and documentation, and leaves a ready-to-send response here. To run it again, click **Deploy**. Do that after new replies come in, or when you want to add context the first run didn't have. **View details** shows the reasoning as it happens, and **Stop** cancels a run. Once a ticket has replies, you can choose what the agent reads: **Ticket only** for the original description, or **With replies** for the whole thread. ## Reading the Answer The Response tab holds two views of the same run: * **Investigation**: the technical breakdown for your team, with code references and root cause * **Response**: the message you can send to the customer From the response panel you can: * **Sources**: the citations behind the answer, including code, articles, and logs * **Reasoning**: the agent's investigation, step by step * **Copy** the response to your clipboard * **Re-run** the agent, adding instructions or attachments to steer the next investigation * **Save to Knowledge Base**: turn the findings into an article * **Feedback**: thumbs up or down, which feeds back into future answers ## Previous Runs Every run on a ticket is kept. Use the run navigation arrows to move between them. # Ticket Sync Source: https://docs.decimal.app/support/ticket-sync Which tickets sync from your connected ticketing tools, how to pull one in by ID, and what to check when one is missing. ## What Gets Synced Connect a ticketing integration and its tickets sync into Decimal automatically. Updates come through the same way: when a customer replies, a teammate comments, or the status changes, it shows up on the ticket in Decimal. ## Webhooks Some ticketing tools can notify Decimal the moment something changes, so tickets and replies show up sooner. Webhook support is per integration. [Plain](/integrations/plain) and [Pylon](/integrations/pylon) integrations both have it, and their pages walk through the setup. If you'd like it for a different ticketing tool, ask us. ## Import Ticket Need a specific ticket now, whether it predates the integration or a filter kept it out? Admins can pull it in by ID. * On **Support**, open the dropdown beside **New Ticket** and choose **Import ticket**. The New Ticket dropdown, showing Create new ticket and Import ticket * Pick the **Provider**. Only the ones you have connected appear. * Enter the ID the ticket has in that tool in the **Ticket** field. * Click **Import Ticket**. It appears in Decimal once syncing finishes. The Import Ticket dialog, with Jira chosen as the provider and an issue key in the Ticket field The ID is whatever that tool calls the ticket: | Provider | ID looks like | Where to find it | | ---------------------------------- | ------------- | ----------------------------------------------- | | [Zendesk](/integrations/zendesk) | `12345` | The number in the ticket's URL | | [Jira](/integrations/jira) | `ENG-123` | The issue key | | [Intercom](/integrations/intercom) | `123456789` | The number at the end of the conversation's URL | Import is available for these three providers today. An ID that doesn't match a ticket returns an error.
Need to bring in a batch? [Get in touch](mailto:support@getdecimal.ai) and we can talk through the options.
## Why a Ticket Didn't Sync Three things to check, in this order. 1. **Open the integration under Settings → Integrations.** An amber notice means the connection broke, and nothing new syncs until it is reconnected. 2. **Check its filters.** Most ticketing integrations let you limit which projects or groups sync, and exclude tickets matching a rule. A ticket caught by one of those never arrives. 3. **Check when the ticket was created.** Decimal syncs recent activity, so anything from before you connected the integration needs importing: one ticket you can [pull in yourself](#import-ticket), a batch we run for you. Email [support@getdecimal.ai](mailto:support@getdecimal.ai) with the ticket's URL and we'll trace it. If we share a Slack channel with your team, you can send it there instead.