# Dovetail

> Dovetail through One

- Skill: `withoneai/dovetail` (Agent Skill)
- Install (CLI): `npx skillmds@latest add withoneai/dovetail`
- Raw SKILL.md: https://api.skillmd.com/api/skills/withoneai/dovetail/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: withoneai (https://skillmd.com/u/withoneai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/withoneai/dovetail

---


# Dovetail through One

Dovetail is an AI-native customer intelligence platform that centralises and synthesises feedback from interviews, support tickets, reviews and research data—helping teams uncover themes, drive product decisions and act on voice-of-customer in one unified workspace.

One exposes Dovetail through four MCP tools. The table below carries real action ids from One's knowledge base, so for a common operation you can skip search and go straight to reading the action's parameters.

## How to run an action

1. Find the action in the table below, or call `search_one_platform_actions` with platform `dovetail` if it is not listed.
2. Call `get_one_action_knowledge` with the action id. Do this every time, including for actions in this table. The table gives you the id, not the parameters.
3. Call `execute_one_action` with parameters copied from that knowledge.

Never guess a parameter name, a body field, or an enum value. The knowledge has the real schema, and a guessed field is either a 400 or a silent write of the wrong thing.

## Before you start

Call `list_one_integrations` once and confirm Dovetail is connected. If it is missing, the user has not connected it: say so and point them at https://app.withone.ai rather than reaching for raw HTTP.

Each connection carries an `access` field. If it reports `{"policy": "methods", "methods": ["GET"]}` the agent is read-only here, so plan a read-only answer instead of attempting a write that will be refused.

## Before a write

Creates, updates, deletes and sends land on a real Dovetail account and cannot be recalled. State the action and the specific target in one line before the first write in a task, and let the user stop you. Reads need no confirmation.

## Actions

### Docs

| Action | Method | Path | Action id |
|---|---|---|---|
| Export a Doc (HTML or Markdown) | GET | `/v1/docs/{{docId}}/export/{{type}}` | `conn_mod_def::GJ2X-BjqX6o::Df6CK7_XQtmG4jPLcbMtMA` |
| Get a Doc by ID | GET | `/v1/docs/{{docId}}` | `conn_mod_def::GJ2X-I0CIp0::Rrp4TaWJRzqq9YgmRuWXsw` |
| List a User's Personal Docs | GET | `/v1/docs/user/{{userId}}` | `conn_mod_def::GJ2X-mmSI1Q::C7YLm9aHSYOF9NJuQbNruA` |
| List Docs | GET | `/docs` | `conn_mod_def::GJ2X-YoQSEQ::eywrqa5ATUSjsFFl-HGDhw` |
| Create a Doc | POST | `/docs` | `conn_mod_def::GJ2X9sUVdsg::g6rk5k9vSsCIbWlk-zUt6Q` |
| Delete a Doc | DELETE | `/docs/{{docId}}` | `conn_mod_def::GJ2X95tPBnY::FJiqOkCsRCacKn5iJ-zvog` |
| Import File to Doc | POST | `/docs/import/file` | `conn_mod_def::GJ2X-QgTttM::Kktx9UemTmW67RdUr-gonQ` |
| Update a Doc | PATCH | `/v1/docs/{{docId}}` | `conn_mod_def::GJ2X-vPJyIE::r_BmWggkSt65Y30-k_uBfA` |

### Insights

| Action | Method | Path | Action id |
|---|---|---|---|
| Export an Insight (HTML or Markdown) | GET | `/v1/insights/{{insightId}}/export/{{type}}` | `conn_mod_def::GJ2X__-7LIc::TUJYPU3-TrmarjSugffnxw` |
| Get an Insight | GET | `/v1/insights/{{insightId}}` | `conn_mod_def::GJ2YAGimv2Y::P07eMFMQT-yK4iKhxHLZHg` |
| List a User's Personal Insights | GET | `/insights/user/{{userId}}` | `conn_mod_def::GJ2YAkPoWiU::88lPAQrJQh6migtOQSjGZg` |
| List Insights | GET | `/insights` | `conn_mod_def::GJ2YAZb1NGA::vGdgSauCRhuZtK41lXdk3Q` |
| Create an Insight | POST | `/insights` | `conn_mod_def::GJ2X_tkv9Kk::O0svhUZIRJCYdfL2E5cbxQ` |
| Delete an Insight | DELETE | `/insights/{{insightId}}` | `conn_mod_def::GJ2X_3wFLwo::P_87cWbYQJi41XP8spta9A` |
| Import File to Insight | POST | `/api/v1/insights/import/file` | `conn_mod_def::GJ2YAOQNCNk::yDvpVzDKSK6Q7SUua0fR7Q` |
| Update an Insight | PATCH | `/insights/{{insightId}}` | `conn_mod_def::GJ2YAqyaxIo::Wgos1C0WRsCnTVDQYcLzhA` |

### Data

| Action | Method | Path | Action id |
|---|---|---|---|
| Export a Data's Content (HTML or Markdown) | GET | `/v1/data/{{dataId}}/export/{{type}}` | `conn_mod_def::GJ2X8_NDJW4::3x36ksoOTDKyJJ8QMFoB-g` |
| Get a Data Item | GET | `/data/{{dataId}}` | `conn_mod_def::GJ2X9GNxL3o::tYO2ZSHLThunadDgtdg80Q` |
| List Workspace Data | GET | `/data` | `conn_mod_def::GJ2X9eFeZWI::OxW0X2tYQ7aMEcaPnk244Q` |
| Create Data | POST | `/data` | `conn_mod_def::GJ2X8wufpfA::8h1_UBuJSbiy-pwoaYKDgw` |
| Delete a Data | DELETE | `/data/{{dataId}}` | `conn_mod_def::GJ2X83qN_GU::QYycpz7oTYS6kyZHHBrCFA` |
| Import File to Data | POST | `/data/import/file` | `conn_mod_def::GJ2X9QH7m1E::JTS28IouT-ySecOGUFsDIA` |
| Update a Data (Patch) | PATCH | `/data/{{dataId}}` | `conn_mod_def::GJ2X9lcZchs::M41sF4t8QMyyQCj8uV-W-Q` |

### Notes

| Action | Method | Path | Action id |
|---|---|---|---|
| Export a Note (HTML or Markdown) | GET | `/v1/notes/{{noteId}}/export/{{type}}` | `conn_mod_def::GJ2YBBigHTU::JMYNb1ldQn-5NRVQtej8lg` |
| Get a Note | GET | `/notes/{{noteId}}` | `conn_mod_def::GJ2YBMVh__M::3a8A2kplQCGMn1BA-7ZXEw` |
| List Notes | GET | `/notes` | `conn_mod_def::GJ2YBiZ9xRQ::jXHrS92kS7uIVvs0_hPEJg` |
| Create Note | POST | `/notes` | `conn_mod_def::GJ2YAyPuYbE::C8WQsQSXSuqq3tlsjT3KJQ` |
| Delete a Note | DELETE | `/v1/notes/{{noteId}}` | `conn_mod_def::GJ2YA4RJ2W8::zsKqWSDkRjapMsPN6IYcyg` |
| Import a File URL as a Note | POST | `/notes/import/file` | `conn_mod_def::GJ2YBXl7xKo::5gYZgitIQoCmSdefidH_Rg` |
| Update a Note | PATCH | `/v1/notes/{{noteId}}` | `conn_mod_def::GJ2YBouAkig::hD0PazF6Sl20z5_VDLQxEg` |

### Channels

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Channel | GET | `/channels/{{channelId}}` | `conn_mod_def::GJ2X7l3ki2E::8pOK94ocRw-CsftD5_RLUw` |
| List Channels | GET | `/channels` | `conn_mod_def::GJ2X7u2BoqI::SyhnvrmMRyy6bJw5LLW9PQ` |
| Create a Channel | POST | `/channels` | `conn_mod_def::GJ2X1r6l0wA::ncAzEi3dRYO7gb_YsA9h9g` |
| Delete a Channel | DELETE | `/channels/{{channelId}}` | `conn_mod_def::GJ2X7Ttg0wY::bs1yTSqlQ9igjpJnolB6pQ` |
| Update a Channel | PATCH | `/v1/channels/{{channelId}}` | `conn_mod_def::GJ2X76XlgF8::yCScz1OKQ3Wpj9iniGGy9A` |

### Contacts

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Contact by ID | GET | `/contacts/{{contactId}}` | `conn_mod_def::GJ2X8SY3_8I::4wjGavWuRYiPsWtXl8jmBw` |
| List Contacts | GET | `/contacts` | `conn_mod_def::GJ2X8eHoT_w::3iMyrPlCSu6vbe9ke9KT6A` |
| Create Contact | POST | `/contacts` | `conn_mod_def::GJ2X8KuNZbM::gkHoXqr8QFG_oU7Lv2o_3g` |
| Update a Contact | PATCH | `/v1/contacts/{{contactId}}` | `conn_mod_def::GJ2X8oyJ3ug::6bMdD87dR5-h0U_E4oIuEA` |

### Folders

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Folder | GET | `/v1/folders/{{folderId}}` | `conn_mod_def::GJ2X--cwd6k::itLouci4SgapThVUC8Babw` |
| Get a Folder’s Contents | GET | `/v1/folders/{{folderId}}/contents` | `conn_mod_def::GJ2X_HH5rWo::96da8CQmQD-kLge5-uz0bg` |
| List Folders | GET | `/folders` | `conn_mod_def::GJ2X_QY68M0::DH07wIQ5SdmQ4q7S9jYMjQ` |

### Projects

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Project | GET | `/v1/projects/{{projectId}}` | `conn_mod_def::GJ2YB4C7gsc::pqtaiXqxQNWRydBoKr1GEQ` |
| List Projects | GET | `/projects` | `conn_mod_def::GJ2YCEuQojg::iZrqpNnqSFmmYySwGwQ3cw` |
| Create Project | POST | `/projects` | `conn_mod_def::GJ2YBwL2jL0::gM2gOJYzQSSjIbRgdPNSmg` |

### Topics

| Action | Method | Path | Action id |
|---|---|---|---|
| Create a Topic in a Channel | POST | `/channels/topic` | `conn_mod_def::GJ2X7L98x-c::Dw44rGijRuKt3tTqRx30tA` |
| Delete a Topic | DELETE | `/v1/channels/topic/{{topicId}}` | `conn_mod_def::GJ2X7emmNiQ::JCoqT1LTQcK3VcnycyT6pA` |

### Highlights

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Highlight | GET | `/highlights/{{highlightId}}` | `conn_mod_def::GJ2X_arXaEU::IXXGNPOnRuurtcqpS33shQ` |
| List Highlights | GET | `/highlights` | `conn_mod_def::GJ2X_l8NPQg::ky3VGW4TSYSTe2Hg0zudgg` |

### Search

| Action | Method | Path | Action id |
|---|---|---|---|
| Magic Search (Search Highlights, Notes, Insights, Channels, and Themes) | POST | `/search` | `conn_mod_def::GJ2YCNMZlhU::NOJYWcGBSkayEi1_UUipvg` |
| Search Across Content Types (V2) | POST | `/api/v2/search` | `conn_mod_def::GJ2YCWqH9J8::J9Cx4rteSwW3bP-jbhAX8A` |

### Tags

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Tag by ID | GET | `/v1/tags/{{tagId}}` | `conn_mod_def::GJ2YCmiK3m8::1PWewdShT5egn5LYYsB0mw` |
| List Workspace Tags | GET | `/tags` | `conn_mod_def::GJ2YCvq4hJQ::IT72Jdd2SDWaiYP9E4Kc6Q` |

### ChannelDataPoints

| Action | Method | Path | Action id |
|---|---|---|---|
| Create a Channel Data Point | POST | `/channels/data` | `conn_mod_def::GJ2X11BLCms::hC6k0StwQqqWvwNbMaKOgg` |

### Files

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a File by ID | GET | `/files/{{fileId}}` | `conn_mod_def::GJ2X-2r2TzY::j5TStOTMSzG1VGyReZn44g` |

### TokenInfo

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Current Token Info | GET | `/v1/token/info` | `conn_mod_def::GJ2X1gwwNGE::6vnQ-WpERXG4cZMA2621hQ` |

### ChannelTopics

| Action | Method | Path | Action id |
|---|---|---|---|
| Update a Channel Topic | PATCH | `/v1/channels/topic/{{topicId}}` | `conn_mod_def::GJ2X8DI7ZHY::z536AFXWTMu9rN_Eup8XLA` |

### Summarize

| Action | Method | Path | Action id |
|---|---|---|---|
| Magic Summarize | POST | `/summarize` | `conn_mod_def::GJ2YCewXgIU::WpC3N8nSRiyKMMY0VIQCJA` |

## When a call fails

The error comes from Dovetail, not from One. A 400 or 422 means your parameters do not match the schema, so re-read the knowledge and fix the field. A 401 or 403 means the connection needs re-authorizing, which no retry will fix. A 404 means the id is not on this account. A 429 means slow down. Never retry a write more than once: the first attempt may have landed.

Full catalog: https://www.withone.ai/knowledge/dovetail

Integration knowledge by One (withone.ai), licensed under [One-Knowledge-1.0](https://www.withone.ai/licenses/knowledge). Attribution must be preserved in derivative works.

