Save integration

View as MarkdownOpen in Claude
Creates the Slack or Discord destination of a configuration or replaces its URL; never deletes, never sends a test message and never touches the channel flag. Both creating and replacing answer **200** with the resource - never 201, no `Location` header. Accepts `PATCH` only (not `PUT`). `{integration_type}` (path, default `slack`) is `slack` or `discord`.\n\n**Body** (JSON):\n- `url` (string, required, max 2048): a complete `https://hooks.slack.com/...` or `https://discord.com/api/webhooks/...` URL matching `{integration_type}`. Always required - an empty, missing or masked URL is invalid input, never a deletion command (use \"Delete integration\" for that).\n\nThe complete URL is returned on ordinary reads too (a conscious exception - see `.docs/security.md`); the MCP answers only a mask. Requires the organization's channel permission for that type; without it the configuration itself answers 404. Body validation runs before authorization: a foreign configuration with an invalid or missing `url` answers 422; only a foreign configuration with a valid `url` answers 404. Never run this request against production with a real webhook URL - use a fictional one.

Authentication

AuthorizationBearer

Personal access token created in the Modular DS dashboard; read-only tokens can only call GET endpoints.

Path parameters

alert_idstringRequired
integration_typestringRequired

Response

200 - Integration saved (create or replace)

dataobjectOptional
jsonapiobjectOptional

Errors

422
Unprocessable Entity Error