{"id":1288,"date":"2026-09-02T10:14:05","date_gmt":"2026-09-02T10:14:05","guid":{"rendered":"https:\/\/blog-origin.donely.ai\/blog\/slack-ai-agent-integration\/"},"modified":"2026-09-02T10:14:08","modified_gmt":"2026-09-02T10:14:08","slug":"slack-ai-agent-integration","status":"publish","type":"post","link":"https:\/\/blog-origin.donely.ai\/blog\/slack-ai-agent-integration\/","title":{"rendered":"Slack AI Agent Integration: A Practical Setup Guide"},"content":{"rendered":"<p>You&#039;ve connected an AI agent to Slack, installed the app, and watched it answer a test message. Then production starts. It reads more channels than intended, posts in the wrong thread, fails completely after a token change, or behaves differently in each client workspace.<\/p>\n<p>That&#039;s the reality of <strong>Slack AI agent integration<\/strong>. The API calls are usually straightforward. The difficult decisions concern identity, permissions, event delivery, routing, auditability, and isolation. A reliable implementation treats Slack as an operational surface and the agent as a governed identity, not as a chatbot with a webhook.<\/p>\n<h2>Table of Contents<\/h2>\n<ul>\n<li><a href=\"#why-slack-ai-agent-integration-matters-now\">Why Slack AI Agent Integration Matters Now<\/a><\/li>\n<li><a href=\"#creating-the-slack-app-and-configuring-oauth-scopes\">Creating the Slack App and Configuring OAuth Scopes<\/a><\/li>\n<li><a href=\"#event-subscriptions-and-message-handling\">Event Subscriptions and Message Handling<\/a><\/li>\n<li><a href=\"#channel-routing-and-reply-logic\">Channel Routing and Reply Logic<\/a><\/li>\n<li><a href=\"#security-rbac-and-multi-workspace-isolation\">Security, RBAC, and Multi-Workspace Isolation<\/a><ul>\n<li><a href=\"#isolation-for-agencies-and-operators\">Isolation for agencies and operators<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#testing-deployment-and-monitoring\">Testing, Deployment, and Monitoring<\/a><ul>\n<li><a href=\"#use-layered-environments\">Use layered environments<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#troubleshooting-and-what-comes-next\">Troubleshooting and What Comes Next<\/a><\/li>\n<\/ul>\n<p><a id=\"why-slack-ai-agent-integration-matters-now\"><\/a><\/p>\n<h2>Why Slack AI Agent Integration Matters Now<\/h2>\n<p>Slack has become the place where teams delegate work, clarify decisions, share context, and resolve operational issues. An agent that only exists behind a separate dashboard forces users to leave that context, so adoption suffers even when the underlying model is capable. Slack&#039;s own product direction reflects this shift. Slack AI moved from a paid Enterprise add-on announced on <strong>February 14, 2024<\/strong>, and limited to English at launch, to AI availability across paid plans by <strong>June 17, 2025<\/strong>, including summarization, huddle notes, workflow generation, recaps, translation, search, and agent deployment. You can review that packaging evolution in <a href=\"https:\/\/slack.com\/blog\/news\/slack-ai-has-arrived\">Slack&#039;s announcement about Slack AI<\/a>.<\/p>\n<p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog-origin.donely.ai\/wp-content\/uploads\/2026\/09\/slack-ai-agent-integration-operational-strategy.jpg\" alt=\"A diagram illustrating why Slack AI agent integration is essential for operational visibility and workflow efficiency.\" \/><\/figure><\/p>\n<p>A practical integration has several moving parts:<\/p>\n<ul>\n<li><strong>Slack app:<\/strong> Defines the installation, permissions, events, and credentials.<\/li>\n<li><strong>OAuth layer:<\/strong> Grants access and ties the installation to a workspace.<\/li>\n<li><strong>Event endpoint:<\/strong> Receives mentions, messages, and membership events.<\/li>\n<li><strong>Agent runtime:<\/strong> Handles retrieval, reasoning, tool calls, and response generation.<\/li>\n<li><strong>Message handler:<\/strong> Verifies, deduplicates, queues, and routes events.<\/li>\n<li><strong>Identity layer:<\/strong> Determines which workspace, user, role, and token apply.<\/li>\n<\/ul>\n<p>A basic bot can be assembled quickly. A production agent that supports several workspaces, role-based actions, approval gates, audit logs, and failure recovery takes a substantially larger engineering effort. The difference isn&#039;t the number of API methods involved. It&#039;s the number of ways an agent can act under the wrong identity.<\/p>\n<blockquote>\n<p><strong>Practical rule:<\/strong> Decide who the agent is before deciding what the agent can connect to.<\/p>\n<\/blockquote>\n<p>This matters even more for agencies and operators managing separate client workspaces. Each installation needs its own token, signing secret, configuration, data partition, and routing rules. Combining client credentials in a shared execution path creates a cross-workspace failure mode that a successful test won&#039;t reveal.<\/p>\n<p><a id=\"creating-the-slack-app-and-configuring-oauth-scopes\"><\/a><\/p>\n<h2>Creating the Slack App and Configuring OAuth Scopes<\/h2>\n<p>Start in the <a href=\"https:\/\/api.slack.com\/apps\">Slack API app dashboard<\/a>. Select <strong>Create New App<\/strong>, then choose a blank app or an app manifest and associate it with the workspace used for testing. A manifest makes configuration reproducible across environments. A blank app is faster for exploratory setup, but record each setting before promoting it elsewhere.<\/p>\n<p>Treat OAuth as an identity boundary, not a checklist. Under <strong>OAuth &amp; Permissions<\/strong>, decide whether the agent acts as the bot or on behalf of a user. <strong>Bot scopes act with the app&#039;s identity<\/strong>, while <strong>user scopes act on behalf of the installing user<\/strong>. Select only permissions tied to a defined workflow, using the <a href=\"https:\/\/docs.slack.dev\/reference\/scopes\">Slack scopes reference<\/a> to verify the exact access model.<\/p>\n<p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog-origin.donely.ai\/wp-content\/uploads\/2026\/09\/slack-ai-agent-integration-oauth-setup.jpg\" alt=\"Screenshot from https:\/\/api.slack.com\/apps\" \/><\/figure><\/p>\n<p>A read-and-reply agent may need:<\/p>\n<ul>\n<li><strong><code>chat:write<\/code><\/strong>, to publish replies as the bot.<\/li>\n<li><strong><code>chat:write.public<\/code><\/strong>, only if it must post in public channels without being invited first.<\/li>\n<li><strong><code>channels:read<\/code><\/strong> and <strong><code>channels:history<\/code><\/strong>, for public-channel discovery and message retrieval.<\/li>\n<li><strong><code>groups:history<\/code><\/strong>, for private channels the bot is authorized to access.<\/li>\n<li><strong><code>im:history<\/code><\/strong> and <strong><code>mpim:history<\/code><\/strong>, when direct-message or group-DM handling is part of the design.<\/li>\n<li><strong><code>users:read<\/code><\/strong>, when profile lookup supports identity or role mapping.<\/li>\n<li><strong><code>app_mentions:read<\/code><\/strong>, when the agent responds to mentions.<\/li>\n<\/ul>\n<p>Avoid <code>channels:manage<\/code>, administrative scopes, and similar permissions unless a documented product requirement requires them. Ask whether the task can run with a bot token and a narrower read surface. If it can, do not add user-token or administrative access.<\/p>\n<p>Use <strong>Install to Workspace<\/strong> to install the app, approve the requested permissions, and place the bot token and signing secret in a secrets manager. Retrieve them at runtime. Do not put credentials in source code, client-side bundles, tickets, or logs.<\/p>\n<p>A fixed configuration may work for one workspace. A product serving multiple workspaces needs OAuth distribution, registered redirect URLs, a <code>state<\/code> value to prevent request forgery, and a durable installation record keyed by workspace identity. For an agency or operator, keep each client installation separate, including its token, signing secret, configuration, data partition, and routing rules. This prevents one client&#039;s agent request from executing with another client&#039;s identity.<\/p>\n<p>Document whether the app uses V2 scopes or classic scope behavior, so reviewers can evaluate the actual permission model. Teams that need a command entry point can also <a href=\"https:\/\/getnerdify.com\/blog\/slack-slash-commands\/\">set up Slack slash commands<\/a>. For broader integration comparisons, review <a href=\"https:\/\/donely.ai\/integrations\">Donely&#039;s integrations<\/a>, then perform the scope review against your own workflows.<\/p>\n<p><a id=\"event-subscriptions-and-message-handling\"><\/a><\/p>\n<h2>Event Subscriptions and Message Handling<\/h2>\n<p>Enable <strong>Event Subscriptions<\/strong> in the app dashboard and provide a publicly reachable HTTPS endpoint. Slack sends a verification request when you save the URL. Your handler must return the challenge in the expected format, then verify the signing secret on every subsequent request using the <code>X-Slack-Signature<\/code> and timestamp headers.<\/p>\n<p>Subscribe only to events that support a defined workflow. Common choices include <code>message.channels<\/code>, <code>message.groups<\/code>, <code>message.im<\/code>, <code>app_mention<\/code>, and <code>member_joined_channel<\/code> for onboarding. A listener that consumes every available event creates more privacy exposure and more processing work without necessarily improving the agent.<\/p>\n<p>Slack&#039;s Events API has a hard ceiling of <strong>30,000 deliveries per workspace, team, app, and 60-minute period<\/strong>. Slack emits an <code>app_rate_limited<\/code> event after that threshold is exceeded, as documented in the <a href=\"https:\/\/docs.slack.dev\/apis\/events-api\/\">Events API guidance<\/a>. That limit should influence architecture from the first deployment. Don&#039;t build a polling loop that repeatedly scans channel history. Consume events, queue work, cache stable metadata, and fetch additional context only when the agent needs it.<\/p>\n<p>The request path should stay deliberately small:<\/p>\n<ol>\n<li>Verify the signature and reject stale or invalid requests.<\/li>\n<li>Check whether the event has already been processed.<\/li>\n<li>Acknowledge Slack quickly.<\/li>\n<li>Put the event on a durable queue.<\/li>\n<li>Let a worker retrieve context, call tools, and post the response.<\/li>\n<\/ol>\n<p>Use the event timestamp and an event identifier as a deduplication key. Slack can retry delivery when your endpoint fails or responds too slowly, so the worker must be safe to run more than once. Idempotency protects against duplicate replies, repeated ticket creation, and repeated external actions.<\/p>\n<p>Socket Mode is convenient for an internal tool because it avoids exposing a public request endpoint. It&#039;s a weaker default for a production, multi-tenant service where you need conventional ingress controls, tenant-aware observability, and predictable connection management. For external deployments, use a normal HTTPS endpoint unless your operating constraints clearly favor Socket Mode.<\/p>\n<p><a id=\"channel-routing-and-reply-logic\"><\/a><\/p>\n<h2>Channel Routing and Reply Logic<\/h2>\n<p>The agent shouldn&#039;t decide where to reply after it generates text. Routing belongs earlier, in a deterministic layer that knows the workspace, channel, event type, thread, and user context.<\/p>\n<p>Cache channel metadata locally, but treat the cache as an optimization rather than the authority. The routing record should include the Slack team identifier, channel identifier, channel type, archived status, external-sharing state, and the internal workflow or client instance associated with that channel. Direct messages should be single-tenant by default. Never infer a client workspace from display names alone.<\/p>\n<p>Useful routing rules are explicit:<\/p>\n<ul>\n<li>A mention in a project channel goes back to the same thread.<\/li>\n<li>A direct message receives a private response unless the user explicitly requests channel delivery.<\/li>\n<li>A message in a support channel routes to the support handler, based on a stored channel ID or approved project tag.<\/li>\n<li>A sensitive action produces a private confirmation request before any public update.<\/li>\n<li>An archived channel receives no automated reply and generates an operational log entry instead.<\/li>\n<\/ul>\n<p><code>thread_ts<\/code> is the most important reply field. If it exists, preserve it unless the workflow intentionally creates a top-level announcement. Omitting it can scatter an otherwise coherent conversation across the channel.<\/p>\n\n<figure class=\"wp-block-table\"><table><tr>\n<th>Channel Context<\/th>\n<th>Trigger<\/th>\n<th>Reply Mode<\/th>\n<th>Notes<\/th>\n<\/tr>\n<tr>\n<td>Public channel<\/td>\n<td>Explicit bot mention<\/td>\n<td>In-thread<\/td>\n<td>Keeps context visible without creating a new top-level post<\/td>\n<\/tr>\n<tr>\n<td>Private channel<\/td>\n<td>Mention or approved message event<\/td>\n<td>In-thread<\/td>\n<td>Requires the bot to have access to the private channel<\/td>\n<\/tr>\n<tr>\n<td>Direct message<\/td>\n<td>User message<\/td>\n<td>DM response<\/td>\n<td>Treat the conversation as belonging to the authenticated workspace and user<\/td>\n<\/tr>\n<tr>\n<td>Group DM<\/td>\n<td>Mention or supported message event<\/td>\n<td>In-thread or group response<\/td>\n<td>Confirm that every participant is within the permitted audience<\/td>\n<\/tr>\n<tr>\n<td>Shared channel<\/td>\n<td>Explicit mention<\/td>\n<td>In-thread, subject to policy<\/td>\n<td>Apply external-sharing restrictions before exposing retrieved data<\/td>\n<\/tr>\n<\/table><\/figure>\n<p>Shared channels require special caution. A response that is safe for an internal channel may disclose information to an external organization. Make external-sharing status part of the authorization decision, not merely a display attribute.<\/p>\n<p><a id=\"security-rbac-and-multi-workspace-isolation\"><\/a><\/p>\n<h2>Security, RBAC, and Multi-Workspace Isolation<\/h2>\n<p>Treat the integration as an <strong>identity boundary<\/strong>. OAuth confirms that access was granted, but it does not determine whether a user may trigger an action, whether the bot may write to a channel, or whether data from one client may appear in another client&#039;s response.<\/p>\n<p>Start with the minimum permission model. Define the read and write surfaces, request only the scopes those surfaces require, reinstall after scope changes, and separate bot-token actions from user-token actions. A bot token gives the agent one controlled application identity. A user token carries delegated authority, which can support user-specific data but increases the impact of token misuse.<\/p>\n<p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog-origin.donely.ai\/wp-content\/uploads\/2026\/09\/slack-ai-agent-integration-security-diagram.jpg\" alt=\"A diagram outlining security best practices for Slack AI agent integration including identity boundary and multi-workspace isolation.\" \/><\/figure><\/p>\n<p>Map Slack user IDs to internal roles in an authorization service. Display names, email addresses, and channel membership are insufficient proof for sensitive operations. Destructive or externally visible actions should pause for human confirmation, showing the requested action, target system, and affected object before execution.<\/p>\n<p><a id=\"isolation-for-agencies-and-operators\"><\/a><\/p>\n<h3>Isolation for agencies and operators<\/h3>\n<p>Each workspace installation needs its own:<\/p>\n<ul>\n<li><strong>Signing secret and token record<\/strong>, encrypted and accessible only through the correct tenant context.<\/li>\n<li><strong>Database partition<\/strong>, keyed by the Slack team identifier and internal instance identifier.<\/li>\n<li><strong>Configuration<\/strong>, including allowed channels, tools, action policies, and escalation contacts.<\/li>\n<li><strong>Execution boundary<\/strong>, preventing a worker for one client from loading another client&#039;s credentials.<\/li>\n<li><strong>Audit trail<\/strong>, recording the initiating user, workspace, action, result, and approval state.<\/li>\n<\/ul>\n<p>Add CI checks that reject environment configuration containing a token assigned to another workspace. Include the workspace identifier in production logs, but never record the token. Review revocation as carefully as installation, including how administrators disable an agent across every client instance.<\/p>\n<p>Governance has not kept pace with adoption. The operational requirement is clear: publish an owner, permission policy, review schedule, and revocation process before the agent becomes a persistent non-human identity. The reported <a href=\"https:\/\/nhimg.org\/articles\/slack-oauth-for-ai-agents-exposes-the-identity-governance-gap\/\">coverage of the identity and governance gap in Slack OAuth agents<\/a> provides context for why OAuth approval alone does not settle identity or governance questions.<\/p>\n<p>For broader control documentation, <a href=\"https:\/\/donely.ai\/security-policy\">Donely&#039;s security policy<\/a> can provide a reference during vendor and architecture reviews.<\/p>\n<p><a id=\"testing-deployment-and-monitoring\"><\/a><\/p>\n<h2>Testing, Deployment, and Monitoring<\/h2>\n<p>A Slack agent needs more than a successful \u201chello\u201d message. Test the decisions that can cause data leakage or workflow duplication, especially routing, authorization, retries, and workspace selection.<\/p>\n<p>Start with unit tests around pure functions. Given a team identifier, channel identifier, event type, thread timestamp, and user role, the router should produce one predictable destination and action policy. Then add contract tests using recorded Slack payloads for mentions, direct messages, private-channel events, retries, malformed signatures, archived channels, and shared-channel scenarios.<\/p>\n<p><a id=\"use-layered-environments\"><\/a><\/p>\n<h3>Use layered environments<\/h3>\n<p>Local development can use a tunnel such as ngrok to receive Slack events. Keep local credentials tied to a development workspace and make the environment visibly incapable of loading production installations. A staging workspace should test real OAuth installation, permission changes, channel invitations, event delivery, and external tool calls.<\/p>\n<p>A second throwaway workspace is valuable for testing installation and revocation behavior. It catches assumptions that a single familiar workspace hides, such as pre-existing channel membership, administrator settings, or stale installation records.<\/p>\n<p>Deploy in a controlled sequence:<\/p>\n<ul>\n<li><strong>Stage narrowly:<\/strong> Invite a small internal group and restrict the agent to approved channels.<\/li>\n<li><strong>Observe behavior:<\/strong> Review replies, tool calls, authorization decisions, retries, and failed actions.<\/li>\n<li><strong>Expand deliberately:<\/strong> Add channels and roles only after the previous surface behaves predictably.<\/li>\n<li><strong>Keep a kill switch:<\/strong> Disable event processing without requiring a code deployment.<\/li>\n<\/ul>\n<p>Your events endpoint needs a health check that doesn&#039;t depend on Slack. Structured logs should include <code>team_id<\/code>, <code>channel_id<\/code>, event type, correlation ID, and processing outcome. Metrics should track authentication failures, duplicate events, queue age, posting failures, external tool failures, and Slack response headers that indicate rate-limit pressure.<\/p>\n<blockquote>\n<p><strong>Rollback should be a runbook, not a hope.<\/strong><\/p>\n<\/blockquote>\n<p>The rollback path should cover feature-flagging the agent off, revoking and rotating tokens, stopping queued work, and notifying workspace administrators. Maintain a central control plane that can disable one client installation or every installation without manually editing separate deployments. For teams that want hosted agent infrastructure rather than operating every runtime, <a href=\"https:\/\/donely.ai\/hermes-agent\/hosting\">Donely&#039;s Hermes agent hosting<\/a> is one option to evaluate alongside a self-managed deployment.<\/p>\n<p><a id=\"troubleshooting-and-what-comes-next\"><\/a><\/p>\n<h2>Troubleshooting and What Comes Next<\/h2>\n<p>Production failures usually fit a small set of categories. Diagnose the boundary first, then the handler, then the model or external tool.<\/p>\n\n<figure class=\"wp-block-table\"><table><tr>\n<th>Symptom<\/th>\n<th>Likely cause<\/th>\n<th>Fastest verification<\/th>\n<\/tr>\n<tr>\n<td>OAuth installation is rejected<\/td>\n<td>Client credentials or redirect URL don&#039;t match<\/td>\n<td>Compare the configured redirect URL character for character with the application request<\/td>\n<\/tr>\n<tr>\n<td><code>missing_scope<\/code> appears<\/td>\n<td>The token lacks a required permission or the app wasn&#039;t reinstalled<\/td>\n<td>Inspect granted scopes, update the request, and reinstall the app<\/td>\n<\/tr>\n<tr>\n<td>Events stop arriving<\/td>\n<td>Subscription URL is unhealthy, signature checks fail, or the bot isn&#039;t in the channel<\/td>\n<td>Review endpoint logs and confirm the bot&#039;s channel membership<\/td>\n<\/tr>\n<tr>\n<td>Requests return <code>429<\/code><\/td>\n<td>The agent is making bursts or polling too aggressively<\/td>\n<td>Inspect response headers, queue work, and apply backoff<\/td>\n<\/tr>\n<tr>\n<td>Replies fail with an invalid channel error<\/td>\n<td>The channel was archived, the ID belongs to another workspace, or the bot was removed<\/td>\n<td>Verify the stored team and channel identifiers before posting<\/td>\n<\/tr>\n<\/table><\/figure>\n<p><figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog-origin.donely.ai\/wp-content\/uploads\/2026\/09\/slack-ai-agent-integration-troubleshooting-steps.jpg\" alt=\"A troubleshooting guide with five numbered steps for fixing common issues with Slack AI agent integrations.\" \/><\/figure><\/p>\n<p>Don&#039;t debug only the generated answer. Trace the complete action path: which workspace received the event, which token was selected, what permissions were available, what context was retrieved, which tool was called, and where the response was posted. That trace tells you whether the failure belongs to Slack, your tenant boundary, your queue, or the agent runtime.<\/p>\n<p>The next generation of integrations will need to support more than event subscriptions and <code>chat.postMessage<\/code>. Slack has described agent deployment through Agentforce, connections to services such as Microsoft Teams and Google Drive when permissions allow, and Slackbot coordination with outside services through MCP. Salesforce also reported <strong>30 new AI features added to Slackbot by March 31, 2026<\/strong>, illustrating how quickly agent functionality is becoming a platform layer rather than an isolated assistant. Those milestones are documented in the <a href=\"https:\/\/investor.salesforce.com\/news\/news-details\/2026\/Salesforce-Announces-the-General-Availability-of-Slackbot--Your-Personal-Agent-for-Work\/default.aspx\">Salesforce announcement on Slackbot general availability<\/a>.<\/p>\n<iframe width=\"100%\" style=\"aspect-ratio: 16 \/ 9\" src=\"https:\/\/www.youtube.com\/embed\/MdycFmVxonA\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe>\n\n<p>Track API version changes, event deprecations, permission-model updates, and emerging approaches to federated agent identity. The winning architecture won&#039;t be the one with the most integrations. It will be the one that can prove which agent acted, for which workspace, under whose authority, with what data, and whether a human approved the result.<\/p>\n<hr>\n<p>Donely gives you a way to host, deploy, and manage AI employees with Slack and other business integrations from a unified platform, while keeping instances and access boundaries separate. Visit <a href=\"https:\/\/donely.ai\">Donely<\/a> to evaluate a governed deployment path for your Slack AI agent integration, especially if you&#039;re managing personal, business, or client workspaces.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You&#039;ve connected an AI agent to Slack, installed the app, and watched it answer a test message. Then production starts. It reads more channels than intended, posts in the wrong thread, fails completely after a token change, or behaves differently in each client workspace. That&#039;s the reality of Slack AI agent integration. The API calls [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1287,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[470,469,467,468,471],"class_list":["post-1288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-agents","tag-agent-deployment","tag-oauth-setup","tag-slack-ai-agent","tag-slack-automation","tag-workflow-security"],"_links":{"self":[{"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/posts\/1288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/comments?post=1288"}],"version-history":[{"count":1,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/posts\/1288\/revisions"}],"predecessor-version":[{"id":1293,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/posts\/1288\/revisions\/1293"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/media\/1287"}],"wp:attachment":[{"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/media?parent=1288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/categories?post=1288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-origin.donely.ai\/blog\/wp-json\/wp\/v2\/tags?post=1288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}