# Slab AI employee

Viktor works in Slab for you. Ask in Slack or Microsoft Teams.

Viktor is an AI employee that connects to Slab and helps you capture, organize, and find team or personal notes, running 10 Slab actions for you like Get Posts, List Posts, and List Users. Ask in plain English from your workspace; Viktor does the work in Slab and reports back. Viktor connects with a scoped API key.

- Tool: Slab
- Category: Productivity
- Connection: API key
- Actions available: 10
- Currently available in: Slack, Microsoft Teams, and Discord
- Page: https://viktor.com/integrations/slab

## What can your AI employee do in Slab?

Viktor connects to your Slab account and completes work in it. He doesn't just answer questions about Slab, he takes the actions on your behalf and delivers the finished result to your workspace.

Unlike workflow builders such as Zapier or Make, there is nothing to configure - no triggers to map, no workflows to maintain. You describe the outcome in plain English, and Viktor picks the right Slab actions, chains them with the other 9,800+ tools he connects to, and asks for approval before anything sensitive runs.

### About Slab

Knowledge Base & Wiki Software

### How a run works

1. **You ask in your workspace** - Describe what you need in plain English
2. **Viktor picks the actions** - Selects from 10 Slab actions, chains them together
3. **Runs in Slab** - Helps you capture, organize, and find team or personal notes - your real data.
4. **Reports back** - Delivers the finished result to your workspace

## Use Slab from Slack and Microsoft Teams

Message Viktor in a Slack channel, a Microsoft Teams chat or a direct message. He opens Slab, does the work and posts the result in the same thread, so nobody has to switch tabs.

He can also run Slab work on a schedule, like a weekly Slab summary posted to your team's channel. Anything sensitive waits for your approval before it runs.

## Security and permissions

- Scoped API keys - Viktor stores your key securely, uses only the scopes you grant, and you can revoke it at any time.
- Review-first approvals: sensitive Slab actions wait for your sign-off before they run.
- Isolated compute per team, encrypted in transit and at rest - and your data is never used to train models.
- SOC 2 Type 1 compliant, with Type 2 and ISO 27001 in progress.

## What can you ask Viktor to do in Slab?

- "Find the Slab doc about onboarding and turn it into a checklist."
- "Summarize what changed in Slab this week and post it here every Friday."
- "Draft a new Slab page from this meeting transcript."
- "Search Slab for anything about the renewal and pull out the key facts."

## How does Viktor work with Slab?

1. Open Viktor in a supported workspace.
2. Connect Slab with an API key - Viktor handles authentication.
3. Ask in plain English. Viktor runs the Slab actions, chains them with your other tools when needed, and reports back. Sensitive actions wait for your approval.

## What can Viktor do in Slab? (10 actions)

- **Add Topic To Post** - Associate a topic with a post via the addTopicToPost GraphQL mutation, returning the topic. Run Search Posts to obtain the post ID and List Topics to obtain the topic ID before calling.
- **Create Post** - Create a new post in Slab via the createPost GraphQL mutation, returning the full post object (e.g. {\"id\":\"abc123\",\"title\":\"Q3 Onboarding Guide\",\"topics\":[{\"id\":\"abc12def\",\"name\":\"Engineering\"}]}). If Content is provided, the body is appended after creation via the updatePostContent mutation (the Slab schema does not accept content at creation time). Slab derives the displayed title from the first line of the post's content, so the appended text is inserted after the existing title line rather than replacing it — this preserves Title instead of overwriting it. NOTE: the returned content field reflects the pre-append snapshot (title line only) even though the append is applied — treat a non-error response as confirmation, not the returned content. New posts are published by default (set Published to false to leave it as an unpublished draft) — unpublished posts do not appear in Search Posts/List Posts results. Run List Topics to obtain a Topic ID to pass at creation.
- **Get Posts** - Get one or more Slab posts by their IDs, returning full post objects including content, owner, and associated topics. Use Search Posts first to discover post IDs; this action does not list or search. Accepts up to 100 IDs per call.
- **List Posts** - List all posts in the Slab organization (no filter). This action is superseded by Search Posts, which accepts an optional Query string and can list all posts when Query is empty. Prefer Search Posts for new workflows. Returns { posts, pageInfo } — posts is an array of post objects (e.g. {\"id\": \"abc123\", \"title\": \"Engineering Onboarding Guide\", \"owner\": {\"id\": \"u1\", \"name\": \"Alice\"}, \"topics\": [{\"id\": \"abc12def\", \"name\": \"Engineering\"}]}). Only forward pagination is supported: when pageInfo.hasNextPage is true, pass pageInfo.endCursor as After to retrieve the next page. Pass Fields (e.g. [\"id\",\"title\",\"owner\"]) to trim large fields like content from each post when only metadata is needed.
- **List Topics** - List all topics in the Slab organization via the organization { topics } GraphQL query, returning an array of topic objects with id and name (e.g. [{\"id\":\"abc12def\",\"name\":\"Engineering\"}]). This is the picker action agents should call to obtain topic IDs for Create Post, Add Topic To Post, and Remove Topic From Post. There is no root topics-listing query, so this reads the organization's topics field.
- **List Users** - List all users in the Slab organization via the organization { users } GraphQL query, returning an array of user objects with id, name, and email (e.g. [{\"id\":\"u1\",\"name\":\"Alice\",\"email\":\"alice@example.com\"}]). This is the picker action agents should call to obtain a user ID for Update Post's Owner ID.
- **Remove Topic From Post** - Disassociate a topic from a post via the removeTopicFromPost GraphQL mutation, returning the topic. This only removes the association (reversible with Add Topic To Post); it does not delete the post or the topic. Run Search Posts for the post ID and List Topics for the topic ID before calling.
- **Search Posts** - List or search posts in the Slab organization via the GraphQL search endpoint. Leave Query empty to list all posts; provide a Query string to full-text search. This is the picker action agents should call to obtain post IDs for Get Posts, Update Post, Add Topic To Post, and Remove Topic From Post. Returns { posts, pageInfo } — posts is an array of post objects (e.g. {\"id\": \"abc123\", \"title\": \"Engineering Onboarding Guide\", \"owner\": {\"id\": \"u1\", \"name\": \"Alice\"}, \"topics\": [{\"id\": \"abc12def\", \"name\": \"Engineering\"}]}). Only forward pagination is supported: when pageInfo.hasNextPage is true, pass pageInfo.endCursor as After to retrieve the next page. Pass Fields (e.g. [\"id\",\"title\",\"owner\"]) to trim large fields like content from each post when only metadata is needed.
- **Update Post Content** - Replace or edit a post's body via the updatePostContent GraphQL mutation. Content must be supplied as a Quill delta (see wrapped in an {\"ops\":[...]} object, passed as a JSON string — the API rejects a native/unwrapped delta object at the GraphQL layer. IMPORTANT: Slab derives the post's displayed title from the first line of its content — there is no independent title field after creation. An op with {\"retain\":0} (or no leading retain) inserts at the very start WITHOUT deleting anything — it pushes the existing content later in the document, so it can change what displays as the title without removing the old title text (which still exists, just no longer on the first line). To actually replace the title, delete the existing title's range — {\"delete\":N} where N is the old title line's length — then insert the replacement. To append body text while preserving the title, first read the post's current content (via Search Posts or Get Posts) and lead with a retain count covering the existing title line's length. This is a distinct endpoint from Update Post (which handles metadata/access only, and cannot change title). Run Search Posts first to obtain the post ID. Example (append after a 20-character title line): postId abc123, delta {\"ops\":[{\"retain\":20},{\"insert\":\"Additional body text.\\n\"}]} — a non-error response confirms the edit was accepted. CRITICAL: this mutation applies your delta positionally against whatever the post's content actually is at the moment the call runs — there is no version check, and the response reflects the pre-edit snapshot, not the result. Always re-read the post's current content (Search Posts or Get Posts) immediately before computing a delta, and if you need to make a second edit to the same post, re-read again first — never compute a new delta from an earlier read or from this action's own response. Offsets computed against a stale snapshot land in the wrong place and silently corrupt the document instead of erroring; they do not queue safely.
- **Update Post** - Update a post's metadata and access settings via the updatePost GraphQL mutation, returning the updated post object. Manages link access (sharing), owner, archived/published state, and banner. NOTE: this mutation does NOT change title or content; use Update Post Content for the body (there is no title-update field in the schema). Run Search Posts first to obtain the post ID.

## Viktor uses Slab together with

- [Slack](https://viktor.com/integrations/slack)
- [Gmail](https://viktor.com/integrations/gmail)
- [Google Sheets](https://viktor.com/integrations/google-sheets)
- [HubSpot](https://viktor.com/integrations/hubspot)
- [Notion](https://viktor.com/integrations/notion)
- [Salesforce](https://viktor.com/integrations/salesforce)

## More Productivity integrations

- [GitHub](https://viktor.com/integrations/github)
- [Jira & Confluence](https://viktor.com/integrations/jira-confluence)
- [Asana](https://viktor.com/integrations/asana)
- [Basecamp](https://viktor.com/integrations/basecamp)
- [Monday.com](https://viktor.com/integrations/monday-com)
- [Neon](https://viktor.com/integrations/neon-2)
- [Linear](https://viktor.com/integrations/linear)
- [Jira](https://viktor.com/integrations/jira)

## FAQ

### Does Viktor integrate with Slab?

Yes. Slab is one of the 9,800+ tools Viktor connects to, via a managed connector. Once connected, anyone on your team can put Viktor to work in Slab from their workspace - no workflow builder, no code.

### How do I connect Slab to Viktor?

Ask Viktor in your workspace to connect Slab, then paste an API key from your Slab account when prompted. Viktor stores the key securely, uses only the scopes you grant, and you can revoke it at any time. Setup takes about two minutes.

### What can Viktor do in Slab?

Viktor can run 10 Slab actions, including Get Posts, List Posts, and List Users - and chain them with other tools in a single request. In practice that means Viktor helps you capture, organize, and find team or personal notes. If a task spans several actions, Viktor plans the sequence itself and reports back when the work is done.

### Do I need to build workflows for Slab?

No. Viktor isn't a workflow builder - there are no triggers to map and nothing to maintain. You ask for the outcome in plain English in your workspace, and Viktor decides which Slab actions to take, runs them, and reports back.

### Is my Slab data secure with Viktor?

Yes. Viktor connects to Slab with a scoped API key, runs in an isolated environment per team, and never trains models on your data. Sensitive actions wait for your approval, and you can revoke access at any time. Viktor is SOC 2 Type 1 compliant, with Type 2 and ISO 27001 in progress.

### How much does the Slab integration cost?

Nothing extra - every integration, including Slab, is available on every plan. You can start free with up to $100 in credits, no credit card required; the Team plan is $100 a month.

### Can Viktor use Slab together with my other tools?

Yes - that's the point. Viktor connects to 9,800+ tools and works across them in a single run: he can pull data from Slab, cross-reference it with another tool - for example Slack or Gmail, and deliver the finished result in your workspace.

## Get started

Viktor is free to start - up to $100 in credits, no credit card required. All 9,800+ integrations are included on every plan. Sign up at https://viktor.com or browse all integrations at https://viktor.com/integrations.
