API de Claude Tag
Administra Claude Tag en Slack para tu organización de Claude Enterprise desde tus propios sistemas: lee y cambia la configuración de canales, espacios de trabajo y los valores predeterminados de Slack de tu organización, consulta qué configuración se aplica y por qué, y vincula Access bundles.
Claude Tag es Claude trabajando como un compañero de equipo en Slack: alguien menciona a Claude en un canal y Claude responde en el hilo. La API de Claude Tag te permite leer y cambiar, desde tus propios sistemas, la configuración de Claude Tag que, de otro modo, un propietario de la organización establece manualmente en claude.ai > Organization settings > Claude Tag. Úsala para activar Claude canal por canal desde un flujo de aprobación, mantener tu configuración en control de versiones o auditar lo que se aplica en cada canal.
Claude Tag es un producto de claude.ai. Esta API lo administra para una organización de Claude Enterprise y no tiene nada que ver con los espacios de trabajo de Claude Platform, el uso de la API ni la Claude Console.
Endpoints
La API expone 18 endpoints en cinco recursos:
| Recurso | Endpoints |
|---|---|
| Canales de Slack: dar de alta un canal, listar los canales de un espacio de trabajo o encontrar uno por sus ID de Slack, leer uno, cambiar su configuración, ver qué se aplica en él, eliminarlo | POST /v1/organizations/claude_tag/slack_channelsGET /v1/organizations/claude_tag/slack_channelsGET /v1/organizations/claude_tag/slack_channels/{id}POST /v1/organizations/claude_tag/slack_channels/{id}GET /v1/organizations/claude_tag/slack_channels/{id}/effectiveDELETE /v1/organizations/claude_tag/slack_channels/{id} |
| Espacios de trabajo de Slack: listar tus espacios de trabajo conectados o encontrar uno por su ID de Slack, leer uno, cambiar su configuración, ver qué se aplica en él | GET /v1/organizations/claude_tag/slack_workspacesGET /v1/organizations/claude_tag/slack_workspaces/{id}POST /v1/organizations/claude_tag/slack_workspaces/{id}GET /v1/organizations/claude_tag/slack_workspaces/{id}/effective |
| Valores predeterminados de Slack: leer y cambiar la configuración que se aplica a cada espacio de trabajo y canal | GET /v1/organizations/claude_tag/slack_defaultsPOST /v1/organizations/claude_tag/slack_defaults |
| Bundles: listar los Access bundles de tu organización, leer uno (solo lectura) | GET /v1/organizations/claude_tag/bundlesGET /v1/organizations/claude_tag/bundles/{bundle_id} |
| Destinos de Bundle: listar dónde está vinculado un Bundle, vincularlo a un canal o espacio de trabajo, leer una vinculación, desvincularlo | GET /v1/organizations/claude_tag/bundles/{bundle_id}/targetsPOST /v1/organizations/claude_tag/bundles/{bundle_id}/targetsGET /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}DELETE /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id} |
Esta versión cubre Slack. Conectar y desconectar un espacio de trabajo de Slack, crear y editar Access bundles, los límites de gasto y toda configuración de Claude Tag distinta de las cinco de Configuración permanecen en claude.ai.
Requisitos previos
- Tu organización debe tener un plan Claude Enterprise, con Claude Tag configurado y al menos un espacio de trabajo de Slack conectado.
- Tu propietario principal crea una clave de API de administrador con el alcance
read:claude_tag, el alcancewrite:claude_tago ambos en claude.ai > Organization settings > API. Consulta Crear una clave de API de administrador. - Cada solicitud lleva tres encabezados:
x-api-key,anthropic-version: 2023-06-01yanthropic-beta: claude-tag-2026-09-28.
Los SDK de Python, TypeScript, C#, Go, Java, PHP y Ruby exponen estos endpoints en client.beta.organization.claude_tag, y la CLI ant en ant beta:organization:claude-tag; envían los encabezados anthropic-version y anthropic-beta por ti. Los ejemplos de esta página usan el cliente predeterminado de cada SDK, que, al igual que la CLI, lee la clave de API de administrador de la variable de entorno ANTHROPIC_API_KEY; los ejemplos de curl leen la clave de la misma variable y la pasan en el encabezado x-api-key. Cuando un SDK o la CLI obtienen más páginas por ti, limit establece el tamaño de página, no el total (consulta Paginación).
Las claves de API pertenecen a la organización y siguen funcionando después de que la persona que las creó se va. No las compartas ni las incluyas en el control de código fuente.
Inicio rápido
Lista los espacios de trabajo de Slack que tu organización ha conectado a Claude Tag:
client = anthropic.Anthropic()
workspaces = client.beta.organization.claude_tag.slack_workspaces.list()
# Obtiene automáticamente más páginas según sea necesario.
for workspace in workspaces:
print(f"{workspace.id}: {workspace.slack.team_id}"){
"data": [
{
"type": "slack_workspace",
"id": "slws_011CZkZnWa7xPc3uJfZe5LgT",
"slack": {
"team_id": "T01ABCD2EFG"
},
"settings": {
"enabled": null,
"instructions": "Answer in English unless asked otherwise.",
"model": null,
"environment_id": null,
"guest_policy": null
},
"agent_id": "cagt_011CZkZrFy4aSg8uMkDt9PqW",
"created_at": "2026-09-02T17:04:11Z",
"updated_at": "2026-10-06T09:41:53Z"
}
],
"next_page": null
}Una configuración que es null no está establecida en este espacio de trabajo, por lo que el espacio de trabajo la hereda. Consulta Configuración almacenada y efectiva.
Alcances
| Alcance | Otorga |
|---|---|
read:claude_tag | Todos los endpoints GET de esta página. |
write:claude_tag | Todos los endpoints POST y DELETE de esta página. No otorga lecturas, aunque la respuesta a un cambio contiene el recurso modificado. |
Una clave puede tener ambos alcances. Una integración que busca un canal y luego lo cambia necesita ambos. Ningún otro alcance otorga acceso a estos endpoints.
La clave debe pertenecer a la organización en su conjunto. La organización es siempre aquella a la que pertenece la clave, y ninguna solicitud nombra una. Una solicitud que envía el encabezado anthropic-workspace-id devuelve 400, porque nada aquí pertenece a un espacio de trabajo de Claude Platform.
Conceptos clave
Nombres en esta página y en claude.ai
| Esta API | claude.ai y Slack |
|---|---|
| Espacio de trabajo de Slack | Un espacio de trabajo de Slack (que Slack también llama team). No tiene relación con un espacio de trabajo de Claude Platform, cuyos ID comienzan con wrkspc_. |
| Valores predeterminados de Slack | Default Slack access |
| Nivel de configuración | Un alcance: un canal, un espacio de trabajo o los valores predeterminados de Slack |
| Bundle | Un Access bundle |
enabled | El interruptor Enable Claude Tag in Slack |
instructions | Custom instructions |
model | Model |
environment_id | Environment |
guest_policy | How should Claude work in channels with guests: restrict es Restrict, channel_only es Channel only y allow es Full access |
Canales y espacios de trabajo dados de alta
Un canal o espacio de trabajo está dado de alta (set up) cuando Claude Tag tiene un registro de configuración para él. Solo un canal o espacio de trabajo dado de alta tiene un id, y solo esos se listan: Slack, no esta API, tiene la lista completa de los canales de un espacio de trabajo.
- Un espacio de trabajo se da de alta cuando un propietario de la organización lo conecta en claude.ai. Ningún endpoint da de alta ni elimina un espacio de trabajo.
- Un canal se da de alta en claude.ai, con el primer uso de Claude en él, o con Dar de alta un canal.
- Los valores predeterminados de Slack se dan de alta la primera vez que alguien configura Claude Tag: un propietario conecta un espacio de trabajo de Slack, o un miembro inicia sesión o usa Claude por primera vez en Slack.
Tu organización es propietaria de un espacio de trabajo mientras su conexión está activa, y es propietaria de los canales que contiene. Un canal o espacio de trabajo del que no eres propietario devuelve el mismo 404 que uno que no existe.
ID
Conoces un canal por los ID que Slack te muestra. Busca su id una vez con Encontrar un canal por sus ID de Slack, y luego almacena y usa el id.
| ID | Prefijo | Dónde aparece |
|---|---|---|
| Recurso de canal de Slack | slch_ | id en un canal; slack_channel_id en cuerpos de solicitud y respuestas |
| Recurso de espacio de trabajo de Slack | slws_ | id en un espacio de trabajo; slack_workspace_id en cuerpos de solicitud y respuestas |
| Bundle | capp_ | id en un Bundle; {bundle_id} en rutas |
| Destino de Bundle | btgt_ | id en un destino de Bundle; {target_id} en rutas |
| ID de team propio de Slack | T | slack.team_id; el parámetro de consulta slack_team_id |
| ID de canal propio de Slack | C o G | slack.channel_id; el parámetro de consulta slack_channel_id |
Un id no cambia mientras el canal o espacio de trabajo esté dado de alta, sin importar lo que cambies en él, con una excepción descrita en Modo de solo lectura. Un canal o espacio de trabajo que se elimina y se vuelve a dar de alta tiene un id nuevo, y el anterior sigue devolviendo 404. Cuando un id almacenado devuelve 404 sin error_code, obtén los valores predeterminados de Slack con la misma clave y los mismos encabezados. Esa solicitud no nombra ningún canal ni espacio de trabajo, así que cualquier estado distinto de 404 significa que el id ya no existe: vuelve a encontrar el canal o espacio de trabajo por sus ID de Slack. Si esa solicitud también devuelve 404, eso no dice nada sobre el id: conserva tus valores de id almacenados y consulta Respuestas de error.
agent_id (con el prefijo cagt_) es la forma en que la Compliance API nombra el mismo canal o espacio de trabajo, tanto como propietario de las sesiones que Claude ejecutó allí como en los eventos del Activity Feed. Dura tanto como el id.
Configuración
Cada nivel de configuración almacena las mismas cinco configuraciones, todas opcionales:
| Configuración | Tipo | Descripción |
|---|---|---|
enabled | boolean | Si Claude está activado. |
instructions | string | Orientación permanente que Claude lee en cada sesión. Como máximo 8,192 caracteres después de recortar los espacios en blanco iniciales y finales. Un texto en blanco borra la configuración. |
model | string | El modelo con el que comienzan las nuevas sesiones: un ID de modelo que tu organización puede usar con Claude Tag. Como máximo 128 caracteres. |
environment_id | string | El entorno en la nube en el que se ejecutan las sesiones, con el prefijo env_. Debe estar activo y pertenecer a tu organización. |
guest_policy | object | Lo que hace Claude en un canal mientras hay un invitado de Slack en él, para todos en el canal: {"type": "allow"} (Claude responde), {"type": "restrict"} (Claude no responde) o {"type": "channel_only"} (Claude responde solo con los Bundles vinculados al propio canal). Consulta Restringir canales con invitados para saber qué significa en canales compartidos mediante Slack Connect o en un Enterprise Grid. |
model y environment_id se verifican cuando los escribes y no se vuelven a verificar: si el modelo o el entorno cambian más adelante, ambas vistas siguen devolviendo el valor almacenado.
Si un propietario de la organización ha asignado un nivel de configuración a un grupo de runners autoalojados en claude.ai, su environment_id devuelve el ID del grupo, que comienza con ccpool_. Esta API no puede establecer un grupo de runners y devuelve 400 para una solicitud que cambia o borra environment_id en un nivel de configuración que almacena uno.
Configuración almacenada y efectiva
La configuración existe en tres niveles: el canal, el espacio de trabajo en el que está el canal y los valores predeterminados de Slack de tu organización. Cada nivel almacena solo lo que se estableció en él. La API te ofrece dos vistas:
- La vista almacenada (Obtener un canal, Obtener un espacio de trabajo) contiene lo que almacena el propio canal o espacio de trabajo. Una configuración que no está establecida allí es
null. Úsala para comparar con la configuración que mantienes en otro lugar. - La vista efectiva (Obtener la configuración efectiva de un canal, Obtener la configuración efectiva de un espacio de trabajo) contiene lo que se aplica una vez que se tienen en cuenta todos los niveles, y
sourcesnombra el nivel del que proviene cada valor. Úsala para auditar o para averiguar por qué Claude se comporta como lo hace en un canal.
Cada configuración se resuelve por separado:
| Configuración | Regla | Cuando ningún nivel la establece |
|---|---|---|
enabled | Decide el nivel más cercano que la establece, por lo que true en un canal activa Claude allí incluso cuando su espacio de trabajo almacena false. | true |
instructions | Aditiva. El texto de cada nivel que la establece se une, del más amplio al más específico, con una línea en blanco entre ellos. | null |
model | Decide el nivel más cercano que la establece. | null: Claude usa el modelo predeterminado del producto |
environment_id | Decide el nivel más cercano que la establece. | null |
guest_policy | Decide el nivel más cercano que la establece. | restrict en una organización cuyos valores predeterminados de Slack están dados de alta |
Por ejemplo, una organización almacena instrucciones en sus valores predeterminados de Slack, desactiva Claude en un espacio de trabajo y establece un modelo en un canal de ese espacio de trabajo. La vista efectiva del canal muestra los tres valores y de dónde proviene cada uno:
{
"type": "slack_channel_effective",
"id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
"settings": {
"enabled": false,
"instructions": "Be brief.",
"model": "claude-opus-5-5",
"environment_id": null,
"guest_policy": { "type": "restrict" }
},
"sources": {
"enabled": {
"type": "slack_workspace",
"slack_workspace_id": "slws_011CZkZnWa7xPc3uJfZe5LgT"
},
"instructions": [{ "type": "slack_defaults" }],
"model": {
"type": "slack_channel",
"slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
},
"environment_id": { "type": "default" },
"guest_policy": { "type": "default" }
}
}Una fuente es una de las siguientes:
type | Significado |
|---|---|
slack_channel | El canal, nombrado en slack_channel_id. |
slack_workspace | El espacio de trabajo, nombrado en slack_workspace_id. |
slack_parent_channel | El canal padre de un canal de código, nombrado en slack_channel_id. Un canal de código es uno que se inició desde otro canal. Mientras el padre sea un canal público en el mismo espacio de trabajo, se sitúa entre el canal y el espacio de trabajo y aporta solo instructions y environment_id. |
slack_defaults | Los valores predeterminados de Slack de tu organización, que no tienen ID. |
default | Ningún nivel establece un valor, por lo que se aplica el valor predeterminado integrado. |
sources.instructions es una lista, del más amplio al más específico, de cada nivel que aporta texto, y está vacía cuando ninguno lo hace. El ID de una fuente puede ser null en una organización que accede al canal mediante una conexión de Slack Enterprise Grid en lugar de mediante el propio espacio de trabajo del canal.
Cambiar la configuración
Los tres endpoints de actualización y Dar de alta un canal aceptan un objeto settings con las mismas reglas:
- Una configuración que omites no cambia.
{"settings": {"enabled": false}}desactiva Claude y deja las otras cuatro configuraciones como están. - Una configuración que envías como
nullse borra, por lo que el nivel vuelve a heredarla. - Todo o nada. Si se rechaza cualquier valor de una solicitud, no se almacena ninguna configuración de la solicitud.
- Seguro de repetir. Cada cambio deja el recurso como lo dejó la primera solicitud idéntica, por lo que ningún endpoint acepta un
Idempotency-Key. Una solicitud que no altera nada no escribe nada y no registra ningún evento del Activity Feed. - Gana la última escritura. Ninguna solicitud acepta una precondición. Dos llamadores que leen un recurso y luego cambian la misma configuración se sobrescriben mutuamente. Solo se devuelve un
409cuando otro cambio se superpone con tu solicitud mientras se ejecuta; no se almacenó nada de tu solicitud, así que vuelve a leer el recurso y reenvía el cambio si todavía es necesario.
Un cambio en guest_policy en un canal puede finalizar las sesiones que se están ejecutando en ese canal. Finalizan en segundo plano, y la respuesta no espera a que terminen.
Niveles configurados
Un nivel de configuración está configurado (configured) una vez que una persona o una clave ha cambiado una configuración en él o le ha vinculado un Bundle. Permanece configurado a partir de entonces, incluso después de que se borren todas las configuraciones y se desvinculen todos los Bundles. Un canal que se dio de alta con el primer uso de Claude, o mediante esta API sin ninguna configuración, no está configurado hasta su primer cambio o su primer Bundle. Esto importa en dos lugares: solo un canal configurado puede eliminarse, y solo un canal que no está configurado puede obtener un id nuevo (consulta Modo de solo lectura).
Modo de solo lectura
API / Terraform read-only mode es una configuración que un propietario de la organización activa y desactiva en la configuración de Claude Tag de claude.ai. El nombre describe claude.ai y Slack: mientras el modo está activado, rechazan los cambios de una persona en lo que administra esta API, por lo que solo las claves realizan esos cambios. No hace que esta API sea de solo lectura. Cada endpoint de esta página responde igual tanto si el modo está activado como desactivado, y ningún endpoint lo lee ni lo cambia.
Mientras el modo está desactivado, las personas y las claves cambian las mismas configuraciones y vinculan y desvinculan los mismos Bundles, y cada cambio reemplaza lo que está almacenado. Actívalo si tu pipeline debe ser la única fuente de cambios.
Mientras el modo está activado, claude.ai y Slack rechazan:
- Cambiar cualquiera de las cinco configuraciones en un canal, un espacio de trabajo o los valores predeterminados de Slack.
- Dar de alta un canal, eliminar un canal o desconectar un espacio de trabajo en claude.ai.
- Vincular un Bundle a un canal o espacio de trabajo, desvincular uno o eliminar un Bundle que esté vinculado a uno.
Algunas cosas siguen siendo posibles en cualquier caso: un propietario aún puede conectar un nuevo espacio de trabajo, crear y editar Bundles y cambiar configuraciones de Claude Tag que esta API no administra. El primer uso de Claude sigue dando de alta un canal, eliminar un canal en Slack sigue eliminándolo de Claude Tag y desinstalar la aplicación de Slack de Claude sigue desconectando ese espacio de trabajo.
Mientras el modo está desactivado, dar de alta en claude.ai un canal que ya está dado de alta y no está configurado puede reemplazar el registro del canal. El canal tiene entonces un id y un agent_id nuevos, y el id anterior devuelve 404. El id de un canal configurado dura hasta que se elimina el canal.
Mensajes directos grupales
Un mensaje directo grupal de Slack tiene un ID con el formato de un canal, por lo que el uso de Claude en uno lo da de alta como un canal: tiene un id, se lista y se puede leer. Dar de alta uno mediante esta API, cambiar una configuración en uno y vincularle un Bundle devuelven 400 cada uno. Desvincular un Bundle de uno está permitido.
Flujos de trabajo de ejemplo
Activar Claude solo en canales aprobados
Cualquier miembro puede invitar a Claude a un canal público. Para mantener Claude activado solo donde lo hayas aprobado:
- Desactiva Claude en todas partes estableciendo
enabledenfalseen los valores predeterminados de Slack. - Cuando tu sistema de aprobación apruebe un canal, da de alta el canal con
"settings": {"enabled": true}. La solicitud acepta los ID propios de Slack y devuelve el canal tanto si ya estaba dado de alta como si no, por lo que es seguro repetirla. - En la misma ejecución, vincula los Bundles para los que se aprobó al equipo, de modo que la primera sesión del canal ya tenga sus herramientas.
Mantener la configuración en control de versiones
- Indexa tu configuración por los ID que Slack muestra para cada canal, y encuentra cada canal por ellos.
- Compara la vista almacenada con lo que declara tu repositorio. La vista efectiva mezclaría valores heredados.
- Envía solo las configuraciones que difieren, y envía
nullpara una configuración que tu repositorio ya no declara. - Pide a un propietario de la organización que active el modo de solo lectura, para que nadie cambie las mismas configuraciones manualmente.
Auditar lo que se aplica en todas partes
- Lista tus espacios de trabajo y luego lista los canales de cada espacio de trabajo.
- Lee la configuración efectiva de cada canal y marca lo que tu política prohíbe, como un canal donde
enabledestruesin una aprobación registrada, o dondeguest_policyesallow. - Lista tus Bundles y luego los destinos de cada Bundle, para ver dónde está vinculado el acceso a sistemas sensibles.
Canales de Slack
El objeto de canal es la vista almacenada de un canal de Slack:
| Campo | Descripción |
|---|---|
type | slack_channel. |
id | Con el prefijo slch_. Consulta ID. |
slack | Los ID propios de Slack: team_id para el espacio de trabajo en el que está el canal y channel_id para el canal. |
settings | Lo que almacena el propio canal. Siempre presente, con las cinco configuraciones; una que no está establecida es null. |
agent_id | Con el prefijo cagt_. Consulta ID. |
created_at | Cuándo se dio de alta el canal. |
updated_at | Cuándo cambió por última vez el registro del canal en Claude Tag. Se actualiza con cada cambio en una configuración, aquí, en claude.ai o en Slack, y también puede actualizarse por un cambio que ninguna respuesta de aquí muestra. Trata un valor posterior como un motivo para volver a leer el canal, no como prueba de que una configuración cambió. Vincular o desvincular un Bundle no lo actualiza por sí solo. |
Un id que no tiene el prefijo slch_ devuelve 400. Un id que tiene el prefijo pero no corresponde a ningún canal de tu organización devuelve 404.
Dar de alta un canal
POST /v1/organizations/claude_tag/slack_channels da de alta un canal de Slack y lo devuelve. slack.team_id y slack.channel_id son obligatorios y son los ID propios de Slack. settings es opcional y sigue Cambiar la configuración. Si el canal ya está dado de alta, la solicitud devuelve el canal existente y aplica settings; la respuesta es 200 en ambos casos. Requiere el alcance write:claude_tag.
client = anthropic.Anthropic()
channel = client.beta.organization.claude_tag.slack_channels.create(
slack={"team_id": "T01ABCD2EFG", "channel_id": "C05HJKL6MNP"},
settings={"instructions": "Answer in the language of the question."},
)
print(channel.id){
"type": "slack_channel",
"id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
"slack": {
"team_id": "T01ABCD2EFG",
"channel_id": "C05HJKL6MNP"
},
"settings": {
"enabled": null,
"instructions": "Answer in the language of the question.",
"model": null,
"environment_id": null,
"guest_policy": null
},
"agent_id": "cagt_011CZkZsHz6bTh2vNmEu4QrX",
"created_at": "2026-10-19T16:20:05Z",
"updated_at": "2026-10-19T16:20:05Z"
}Antes de dar de alta un canal, la aplicación de Slack de Claude confirma con Slack que el canal está en el espacio de trabajo, no está archivado y es visible para la aplicación. Un canal que no supera esa verificación devuelve 404, al igual que un espacio de trabajo que no tiene instalada la aplicación de Slack de Claude.
Dar de alta el canal y aplicar settings son dos pasos. Cuando el primero tiene éxito y el segundo se rechaza, la respuesta es el rechazo y el canal permanece dado de alta sin nada almacenado. Ese rechazo lleva un error_code que comienza con slack_channel_set_up_ y el id del nuevo canal en error.details.slack_channel_id (consulta Respuestas de error). Corrige settings y envíalo en una actualización a ese id, o vuelve a enviar la solicitud de alta.
Listar canales
GET /v1/organizations/claude_tag/slack_channels lista los canales dados de alta de un espacio de trabajo, del más reciente al más antiguo según created_at. slack_team_id es obligatorio y es el ID propio de Slack para el espacio de trabajo. Una página puede contener menos de limit canales, o ninguno, mientras next_page sigue establecido, así que sigue solicitando páginas hasta que next_page sea null (consulta Paginación). Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
channels = client.beta.organization.claude_tag.slack_channels.list(
slack_team_id="T01ABCD2EFG"
)
# Obtiene automáticamente más páginas según sea necesario.
for channel in channels:
print(f"{channel.id}: {channel.slack.channel_id}")La respuesta es {"data": [...], "next_page": ...}, donde cada elemento es un objeto de canal. Un slack_team_id que nombra un espacio de trabajo del que tu organización no es propietaria devuelve 404.
Encontrar un canal por sus ID de Slack
Agrega slack_channel_id, el ID propio de Slack para el canal, para buscar un canal. data contiene ese canal, o está vacío cuando el canal no está dado de alta. Una búsqueda ignora limit y page, y su next_page es null. Así es como encuentras el id de un canal.
client = anthropic.Anthropic()
page = client.beta.organization.claude_tag.slack_channels.list(
slack_team_id="T01ABCD2EFG",
slack_channel_id="C05HJKL6MNP",
)
for channel in page.data:
print(channel.id)Pasar un ID slch_ como slack_channel_id devuelve 400.
Obtener un canal
GET /v1/organizations/claude_tag/slack_channels/{id} devuelve el objeto de canal. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
channel = client.beta.organization.claude_tag.slack_channels.retrieve(
"slch_011CZkZmRt4vNq8sHbYw2KdX"
)
print(channel.settings.enabled)Actualizar un canal
POST /v1/organizations/claude_tag/slack_channels/{id} cambia la configuración del canal y devuelve el objeto de canal. settings es obligatorio y sigue Cambiar la configuración. Requiere el alcance write:claude_tag.
Desactiva Claude en un canal y deja sus otras configuraciones como están:
client = anthropic.Anthropic()
channel = client.beta.organization.claude_tag.slack_channels.update(
"slch_011CZkZmRt4vNq8sHbYw2KdX",
settings={"enabled": False},
)
print(channel.settings.enabled)Borra las instrucciones del canal, para que solo se apliquen las heredadas:
client = anthropic.Anthropic()
channel = client.beta.organization.claude_tag.slack_channels.update(
"slch_011CZkZmRt4vNq8sHbYw2KdX",
settings={"instructions": None},
)
print(channel.settings.instructions)Obtener la configuración efectiva de un canal
GET /v1/organizations/claude_tag/slack_channels/{id}/effective devuelve lo que se aplica en el canal y de dónde proviene cada valor. Configuración almacenada y efectiva muestra una respuesta completa. En esta vista, enabled y guest_policy nunca son null. La vista se resuelve en cada lectura, por lo que no tiene created_at ni updated_at. Si no se puede leer un nivel, la solicitud falla con 503 en lugar de resolverse sin él. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
effective = client.beta.organization.claude_tag.slack_channels.effective.retrieve(
"slch_011CZkZmRt4vNq8sHbYw2KdX"
)
print(effective.settings.instructions)Eliminar un canal
DELETE /v1/organizations/claude_tag/slack_channels/{id} elimina un canal de Claude Tag. Es la misma eliminación que hace un propietario de la organización en claude.ai, con el mismo efecto. No elimina, archiva ni modifica el canal en Slack, ni ningún mensaje en él. Requiere el alcance write:claude_tag.
client = anthropic.Anthropic()
deleted_channel = client.beta.organization.claude_tag.slack_channels.delete(
"slch_011CZkZmRt4vNq8sHbYw2KdX"
)
print(deleted_channel.id){
"type": "slack_channel_deleted",
"id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
}El id devuelve 404 en cuanto la solicitud responde, y el resto se elimina en segundo plano. Una eliminación repetida devuelve 404.
Eliminar un canal no detiene a Claude en él. Claude sigue respondiendo según lo que el canal hereda, sin memoria del canal, y su siguiente uso puede volver a dar de alta el canal con un nuevo id.
- Para que Claude deje de responder en un canal, establece
enabledenfalseen él. - Para que un canal no almacene nada y conserve sus sesiones y su memoria, borra cada configuración y desvincula cada Bundle.
Hay dos tipos de canal que no se pueden eliminar aquí y devuelven 400: uno que no está configurado (error_code: "slack_channel_not_configured"), y uno que contiene configuración que esta API no administra, como un grupo de runners o una configuración que solo tiene claude.ai. Un propietario de la organización elimina el segundo tipo en claude.ai.
Espacios de trabajo de Slack
El objeto de espacio de trabajo es la vista almacenada de un espacio de trabajo de Slack. Tiene los mismos campos que el objeto de canal, excepto que type es slack_workspace, id tiene el prefijo slws_ y slack contiene solo team_id. La respuesta del Inicio rápido muestra uno completo.
Un id que no tiene el prefijo slws_ devuelve 400. Un id que tiene el prefijo pero no corresponde a ningún espacio de trabajo de tu organización devuelve 404.
Listar espacios de trabajo
GET /v1/organizations/claude_tag/slack_workspaces lista los espacios de trabajo dados de alta que pertenecen a tu organización, del más reciente al más antiguo según created_at. El Inicio rápido muestra la solicitud y la respuesta. Para encontrar un espacio de trabajo por el ID propio de Slack, agrega slack_team_id: data contiene ese espacio de trabajo, o está vacío cuando no está dado de alta, y un espacio de trabajo que no pertenece a tu organización devuelve 404. Requiere el alcance read:claude_tag.
Obtener un espacio de trabajo
GET /v1/organizations/claude_tag/slack_workspaces/{id} devuelve el objeto de espacio de trabajo. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
workspace = client.beta.organization.claude_tag.slack_workspaces.retrieve(
"slws_011CZkZnWa7xPc3uJfZe5LgT"
)
print(workspace.settings.instructions)Actualizar un espacio de trabajo
POST /v1/organizations/claude_tag/slack_workspaces/{id} cambia la configuración del espacio de trabajo y devuelve el objeto de espacio de trabajo. settings es obligatorio y sigue Cambiar la configuración. Lo que establezcas aquí se aplica en cada canal del espacio de trabajo que no establezca su propio valor. Requiere el alcance write:claude_tag.
client = anthropic.Anthropic()
workspace = client.beta.organization.claude_tag.slack_workspaces.update(
"slws_011CZkZnWa7xPc3uJfZe5LgT",
settings={"guest_policy": {"type": "restrict"}},
)
print(workspace.settings.guest_policy)Obtener la configuración efectiva de un espacio de trabajo
GET /v1/organizations/claude_tag/slack_workspaces/{id}/effective devuelve lo que se aplica en el espacio de trabajo, resuelto a partir del espacio de trabajo y los valores predeterminados de Slack, con la forma que muestra Configuración almacenada y efectiva, con type establecido en slack_workspace_effective. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
effective = client.beta.organization.claude_tag.slack_workspaces.effective.retrieve(
"slws_011CZkZnWa7xPc3uJfZe5LgT"
)
print(effective.settings.enabled)Valores predeterminados de Slack
Tu organización tiene exactamente un objeto de valores predeterminados de Slack. Se aplica a cada espacio de trabajo y canal, no tiene id y no tiene vista efectiva, ya que no hay ningún nivel más amplio.
| Campo | Descripción |
|---|---|
type | slack_defaults. |
settings | Lo que almacenan los valores predeterminados, como en un canal. |
agent_id | Con el prefijo cagt_. null hasta que los valores predeterminados de Slack estén dados de alta. |
Obtener los valores predeterminados de Slack
GET /v1/organizations/claude_tag/slack_defaults devuelve el objeto. Una organización cuyos valores predeterminados de Slack no están dados de alta obtiene 200 con cada configuración y agent_id en null. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
defaults = client.beta.organization.claude_tag.slack_defaults.retrieve()
print(defaults.settings.guest_policy)Actualizar los valores predeterminados de Slack
POST /v1/organizations/claude_tag/slack_defaults cambia los valores predeterminados y devuelve el objeto. settings es obligatorio y sigue Cambiar la configuración. Una solicitud que establece un valor mientras los valores predeterminados de Slack no están dados de alta devuelve 400. Requiere el alcance write:claude_tag.
client = anthropic.Anthropic()
defaults = client.beta.organization.claude_tag.slack_defaults.update(
settings={
"instructions": "Keep replies under 200 words.",
"environment_id": "env_011CZkZqDx2zRf5tLjCs7NpV",
},
)
print(defaults.settings.environment_id){
"type": "slack_defaults",
"settings": {
"enabled": null,
"instructions": "Keep replies under 200 words.",
"model": null,
"environment_id": "env_011CZkZqDx2zRf5tLjCs7NpV",
"guest_policy": null
},
"agent_id": "cagt_011CZkZtKa8cUj4wPnFv6RsY"
}Bundles
Un Bundle es lo que claude.ai llama un Access bundle: un conjunto de accesos con nombre, como conectores, repositorios y credenciales, que Claude puede usar en un canal o espacio de trabajo. Los propietarios de la organización crean, editan y eliminan Bundles en claude.ai. Esta API los lista y los vincula. Devuelve el nombre y la descripción de un Bundle y nunca lo que el Bundle otorga.
| Campo | Descripción |
|---|---|
type | bundle. |
id | Con el prefijo capp_. |
display_name | El nombre del Bundle. |
description | Para qué sirve el Bundle. null cuando no tiene ninguna. |
created_at, updated_at | Cuándo se creó el Bundle y cuándo se modificó por última vez. |
Un bundle_id que no tiene el prefijo capp_ devuelve 400. Uno que tiene el prefijo pero no existe o pertenece a otra organización devuelve 404, independientemente de lo que contenga el resto de la solicitud. Los Bundles que Claude Tag administra para sí mismo no se listan y devuelven 404.
Listar Bundles
GET /v1/organizations/claude_tag/bundles lista los Bundles de tu organización, del más reciente al más antiguo según created_at. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
bundles = client.beta.organization.claude_tag.bundles.list()
# Obtiene automáticamente más páginas según sea necesario.
for bundle in bundles:
print(f"{bundle.id}: {bundle.display_name}"){
"data": [
{
"type": "bundle",
"id": "capp_011CZkZjLP1cWxj5EtMmdgbq",
"display_name": "Support tools",
"description": "Issue tracker and the support runbooks repository.",
"created_at": "2026-09-12T08:15:30Z",
"updated_at": "2026-09-30T13:02:47Z"
}
],
"next_page": null
}Obtener un Bundle
GET /v1/organizations/claude_tag/bundles/{bundle_id} devuelve el objeto Bundle. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
bundle = client.beta.organization.claude_tag.bundles.retrieve(
"capp_011CZkZjLP1cWxj5EtMmdgbq"
)
print(bundle.display_name)Destinos de Bundle
Un destino de Bundle es el registro de un Bundle vinculado a un canal o a un espacio de trabajo. Un Bundle vinculado a un espacio de trabajo se puede usar en el espacio de trabajo y en cada canal que contiene. Un Bundle vinculado a un canal solo se puede usar en ese canal.
| Campo | Descripción |
|---|---|
type | slack_channel o slack_workspace. |
id | Con el prefijo btgt_. Es el {target_id} en las rutas, y nunca es el id propio del canal o del espacio de trabajo. |
slack_channel_id | En un destino slack_channel: el id del canal, con el prefijo slch_. |
slack_workspace_id | En un destino slack_workspace: el id del espacio de trabajo, con el prefijo slws_. |
created_at | Cuándo se vinculó el Bundle. |
Un Bundle se vincula a un canal o espacio de trabajo como máximo una vez, y el mismo par siempre tiene el mismo id, incluso después de desvincularlo y volver a vincularlo. El id es opaco: obtenlo de la respuesta a una vinculación o de la lista. Un destino de Bundle no contiene el id de su Bundle, que sus rutas también necesitan, así que guarda ambos juntos.
El primer Bundle vinculado a un canal o espacio de trabajo lo deja configurado. Vincular o desvincular no cambia ninguna configuración almacenada. Las sesiones que están en ejecución en el canal o espacio de trabajo reciben un aviso de que su acceso cambió.
El Bundle que claude.ai vincula como parte de una configuración de guardia se lista y se puede leer, pero no se puede vincular ni desvincular aquí, y no se puede vincular nada a un canal o espacio de trabajo administrado por una configuración de guardia, ni desvincular nada de él. Cada una de esas solicitudes devuelve 400.
Listar los destinos de un Bundle
GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets lista los canales y espacios de trabajo a los que está vinculado el Bundle, del más reciente al más antiguo según created_at. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
targets = client.beta.organization.claude_tag.bundles.targets.list(
"capp_011CZkZjLP1cWxj5EtMmdgbq"
)
# Obtiene automáticamente más páginas según sea necesario.
for target in targets:
print(f"{target.id}: {target.type}"){
"data": [
{
"type": "slack_channel",
"id": "btgt_011CZkZpBv9yQd6wKhAr8MnU",
"slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
"created_at": "2026-10-19T16:21:44Z"
},
{
"type": "slack_workspace",
"id": "btgt_011CZkZuMc3dVk7xQpGw9StZ",
"slack_workspace_id": "slws_011CZkZnWa7xPc3uJfZe5LgT",
"created_at": "2026-09-12T08:17:02Z"
}
],
"next_page": null
}Solo se listan las vinculaciones a canales y espacios de trabajo. Un Bundle que está vinculado en claude.ai a cualquier otra cosa, como Default Slack access, no tiene un destino de Bundle para ello, y tampoco lo tiene una regla que aplica un Bundle en muchos canales a la vez. Por lo tanto, los Bundles que Claude puede usar en un canal pueden ser más que los destinos que lo nombran. Ningún endpoint lista los Bundles vinculados a un canal o espacio de trabajo concreto.
Vincular un Bundle
POST /v1/organizations/claude_tag/bundles/{bundle_id}/targets vincula el Bundle y devuelve el destino de Bundle. El cuerpo indica el type y el id correspondiente. El canal o espacio de trabajo ya debe estar dado de alta: vincular nunca da de alta un canal. Vincular un par que ya está vinculado devuelve 200 con el destino de Bundle existente. Requiere el alcance write:claude_tag.
Vincula un Bundle a un canal:
client = anthropic.Anthropic()
target = client.beta.organization.claude_tag.bundles.targets.create(
"capp_011CZkZjLP1cWxj5EtMmdgbq",
type="slack_channel",
slack_channel_id="slch_011CZkZmRt4vNq8sHbYw2KdX",
)
print(target.id){
"type": "slack_channel",
"id": "btgt_011CZkZpBv9yQd6wKhAr8MnU",
"slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
"created_at": "2026-10-19T16:21:44Z"
}Vincula un Bundle a un espacio de trabajo:
client = anthropic.Anthropic()
target = client.beta.organization.claude_tag.bundles.targets.create(
"capp_011CZkZjLP1cWxj5EtMmdgbq",
type="slack_workspace",
slack_workspace_id="slws_011CZkZnWa7xPc3uJfZe5LgT",
)
print(target.id)Una vinculación a un canal tiene condiciones bajo las cuales se aplica, como solo mientras no haya ningún invitado de Slack en el canal. Las condiciones se establecen en claude.ai y no se devuelven aquí. Vincular a través de esta API usa las condiciones predeterminadas, y vincular un par que ya está vinculado deja sus condiciones sin cambios.
Obtener un destino de Bundle
GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id} devuelve el destino de Bundle. Un target_id que no tiene el prefijo btgt_ devuelve 400. Uno que pertenece a otro Bundle, que fue desvinculado o que corresponde a un canal o espacio de trabajo que ya no está dado de alta devuelve 404. Requiere el alcance read:claude_tag.
client = anthropic.Anthropic()
target = client.beta.organization.claude_tag.bundles.targets.retrieve(
"btgt_011CZkZpBv9yQd6wKhAr8MnU",
bundle_id="capp_011CZkZjLP1cWxj5EtMmdgbq",
)
print(target.type)Desvincular un Bundle
DELETE /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id} desvincula el Bundle. Una desvinculación repetida devuelve 404. Requiere el alcance write:claude_tag.
client = anthropic.Anthropic()
deleted_target = client.beta.organization.claude_tag.bundles.targets.delete(
"btgt_011CZkZpBv9yQd6wKhAr8MnU",
bundle_id="capp_011CZkZjLP1cWxj5EtMmdgbq",
)
print(deleted_target.id){
"type": "bundle_target_deleted",
"id": "btgt_011CZkZpBv9yQd6wKhAr8MnU"
}Valores no reconocidos
guest_policy.type, el type de una fuente, el type de un destino de Bundle y los códigos de error pueden incorporar nuevos valores en cualquier momento. Trata un valor que no reconozcas como tratarías cualquier cadena desconocida, en lugar de fallar.
Limitación de velocidad
Las solicitudes se limitan por organización, en dos presupuestos que comparten todas las claves de tu organización y que son independientes de los demás límites de la Admin API de tu organización. Cada presupuesto permite una ráfaga y luego se recarga a un ritmo constante:
| Presupuesto | Solicitudes | Ráfaga | Recarga |
|---|---|---|---|
| Lecturas | Cada GET | 120 | 2 por segundo |
| Cambios | Cada POST y DELETE | 60 | 1 por segundo |
Las solicitudes que superan un presupuesto devuelven 429 Too Many Requests con un encabezado retry-after. Las respuestas incluyen los encabezados anthropic-ratelimit-requests-limit, anthropic-ratelimit-requests-remaining y anthropic-ratelimit-requests-reset del presupuesto del que consumió la solicitud.
Paginación
Los endpoints de lista usan un cursor opaco. La primera solicitud devuelve hasta limit filas más un cursor next_page; pasa el cursor sin cambios como el parámetro page en la siguiente solicitud, y repite hasta que next_page sea null. Trata la cadena del cursor como opaca: no la analices, modifiques ni construyas tú mismo. Listar canales puede devolver una página con menos de limit canales, o ninguno, mientras next_page sigue establecido, así que sigue solicitando páginas hasta que next_page sea null. Los iteradores de lista de los SDK de Python, TypeScript, C#, Go, Java y Ruby y la CLI (excepto con --format raw) lo hacen por ti. En PHP y curl, solicita cada página tú mismo y pasa su next_page como page.
limit tiene un valor predeterminado de 20, con un mínimo de 1 y un máximo de 100. Cada lista se ordena del más reciente al más antiguo según created_at, y no admite ningún otro orden.
Respuestas de error
Las respuestas de error siguen la forma estándar documentada en Errores. Indica el request_id del cuerpo de la respuesta cuando te comuniques con soporte.
| Estado | Significado |
|---|---|
| 400 | Entrada no válida, o la operación no se aplica a este canal, espacio de trabajo o Bundle (consulta la sección de cada endpoint). |
| 401 | Falta el encabezado x-api-key, o no se reconoce la clave. |
| 403 | La clave no es una clave con alcance a nivel de organización, le falta el alcance requerido, o tu organización no puede hacer este cambio. |
| 404 | Recurso no encontrado, o no pertenece a tu organización. También se devuelve cuando la solicitud omite el valor anthropic-beta, o la API no está habilitada para tu organización, de modo que los endpoints aparecen como inexistentes. |
| 409 | Otra cosa cambió o eliminó el recurso mientras se ejecutaba la solicitud. No se almacenó nada. Vuelve a leerlo y reenvía el cambio si todavía es necesario. |
| 429 | Se excedió el "rate limit" (límite de velocidad). Consulta Limitación de velocidad. |
| 500 | Error interno. |
| 503 | Temporal. En un cambio, no indica si el cambio se almacenó. Todos los cambios se pueden repetir de forma segura, así que vuelve a enviar la solicitud sin cambios. |
Cuando un estado tiene varias causas que manejarías de forma diferente, el error también incluye error.details.error_code:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "...",
"details": {
"error_code": "slack_channel_set_up_settings_refused",
"slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
}
},
"request_id": "req_018EeWyXxfu5pfWkrYcMdjWG"
}error_code | Estado | Significado y qué hacer |
|---|---|---|
organization_level_scoped_api_key_required | 403 | La credencial no es una clave de API de administrador con alcance que pertenezca a la organización en su conjunto. Pide una a tu propietario principal. |
api_key_scope_missing | 403 | A la clave le falta read:claude_tag o write:claude_tag, según lo que requiera el endpoint. |
workspace_selection_not_accepted | 400 | La solicitud envió el encabezado anthropic-workspace-id. Elimínalo. |
claude_tag_writes_not_enabled | 403 | Tu organización puede leer a través de esta API, pero no está habilitada para hacer cambios. |
compliance_configuration_restricted | 403 | Tu organización tiene una configuración de cumplimiento bajo la cual Claude Tag no almacena nada nuevo, como la retención de datos cero. Se rechazan dar de alta un canal, actualizar la configuración (incluso para borrarla) y vincular un Bundle. Desvincular un Bundle y eliminar un canal no se rechazan. |
environment_not_found | 404 | environment_id no corresponde a ningún entorno que tu organización pueda usar aquí. El id de la ruta es correcto. |
environment_archived | 400 | environment_id corresponde a un entorno archivado. |
slack_channel_set_up_settings_refused | 400 | La solicitud dio de alta el canal y luego se rechazó settings. details.slack_channel_id es el canal. Consulta Dar de alta un canal. |
slack_channel_set_up_environment_not_found | 404 | La solicitud dio de alta el canal y luego no se encontró environment_id. details.slack_channel_id es el canal. |
slack_channel_set_up_settings_conflict | 409 | La solicitud dio de alta el canal y luego otro cambio se superpuso con settings. No se almacenó nada de settings. details.slack_channel_id es el canal. |
slack_channel_not_configured | 400 | El canal no está configurado, por lo que no se puede eliminar. |
Es posible que se agreguen nuevos códigos. Trata un código que no reconozcas de la misma forma en que tratas su estado. Un 404 sin error_code tiene una de dos causas. O bien no se encontró algo que la solicitud nombra (un id en la ruta, o un canal o espacio de trabajo de Slack en el cuerpo o en la consulta), o bien todos los endpoints aparecen como inexistentes porque la solicitud omite el valor anthropic-beta o la API no está habilitada para tu organización. Para distinguirlas, obtén los valores predeterminados de Slack con la misma clave y los mismos encabezados: esa solicitud no nombra nada, por lo que devuelve 404 solo en el segundo caso.
Eventos del Activity Feed
Cada cambio realizado a través de esta API se registra en el Activity Feed de la Compliance API de tu organización, atribuido a la clave de API como un api_actor que lleva su ID apikey_. Los eventos son los mismos que el feed registra cuando se realiza el mismo cambio en claude.ai, por lo que una sola consulta encuentra un cambio sin importar cómo se haya realizado.
| Evento | Se emite cuando |
|---|---|
ccr_agent_created | Se da de alta un canal. |
ccr_agent_updated | Cambia una configuración en un canal, un espacio de trabajo o los valores predeterminados de Slack, o un nivel pasa a estar configurado. |
ccr_agent_deleted | Se elimina un canal. Sus destinos de Bundle se eliminan con él y no emiten ningún evento propio. |
ccr_agent_proxy_profile_bound | Se vincula un Bundle. |
ccr_agent_proxy_profile_unbound | Se desvincula un Bundle. |
Los eventos identifican un canal o espacio de trabajo por su agent_id, no por su id. Los dos eventos de Bundle identifican el Bundle en profile_id y el canal o espacio de trabajo en scope_id.
Un evento ccr_agent_updated enumera lo que cambió en updated_fields, con los nombres propios del feed:
| Configuración | Nombre en updated_fields |
|---|---|
enabled | slackbot_version |
instructions | system_prompt_addendum |
model | default_model |
environment_id | default_environment_id |
guest_policy | guest_policy |
| (el nivel pasó a estar configurado) | is_virtual |
Las lecturas, las solicitudes que no cambian nada y las solicitudes que se rechazan antes de que se almacene algo no registran nada. Una solicitud de alta que da de alta un canal y cuyo settings se rechaza después registra ccr_agent_created.
Consulta también
Donde tu propietario principal crea una clave con alcance definido.
Qué es Claude Tag, cómo configurarlo y qué hace cada configuración en Slack.
El registro de auditoría de cada cambio realizado aquí y en claude.ai.
Administra los plugins en tu organización de Claude Enterprise.
Was this page helpful?