---
title: "updateIntegration"
method: PUT
path: "/v1/integrations/{integrationId}"
tags: ["integrations"]
---

# updateIntegration

`PUT /v1/integrations/{integrationId}`

Update an existing integration configuration

## Path parameters

- `integrationId` string, uuid, required

## Request body

- UpdateIntegrationRequest
  - `name` string — Integration name
  - `description` string — Optional description of the integration
  - `access_token_ids` string[] — List of access token IDs associated with this integration
  - `app_ids` string[] — List of app IDs associated with this integration
  - `environment_config` EnvironmentFieldConfig[] — Configuration defining environment variables needed by this integration. Values are stored in the Environments API.
    - `key` string, required — Environment variable key, used to look up the value in the Environments API.
    - `label` string, required — Display label for the field in the UI
    - `type` 'String' | 'SecretString', required — Whether the value is a plain string or an encrypted secret
    - `description` string — Help text shown below the field
    - `required` boolean — Whether this field must be filled before the integration can be used
    - `order` integer — Sort order for display and drag-to-reorder
  - `settings` IntegrationSettings — Settings for the integration
    - `autoRefresh` AutoRefreshSettings — Auto-refresh settings for keeping integration data fresh
      - `enabled` boolean — Whether auto-refresh is enabled
      - `freshnessThresholdMinutes` integer — Maximum age (in minutes) of data before it is considered stale and eligible for refresh
    - `notifications` IntegrationNotificationConfig — Integration monitoring notification configuration. Rides Integration.settings.notifications (camelCase) and surfaces on both v1 and v2 GET/PUT. Unknown keys are stripped server-side to stay forward-compatible with deferred (V2) rule types.
      - `enabled` boolean, required — Master switch for this integration's notifications.
      - `recipients` NotificationRecipient[], required — epilot user ids notified for this integration. Same-org membership and per-user notification preferences are enforced at send time (Phases 3–5), not at config-write time.
        - `user_id` string, required — epilot user id. Same-org membership is enforced at send time (Phases 3–5), which re-validates each recipient against the integration's org before fanning out — it is not enforced at config-write time.
      - `defaultChannels` NotificationChannelSet, required — Delivery channel toggles. New channels added in svc-notification-api inherit here.
        - `email` boolean, required
        - `in_app` boolean, required
      - `monitoredUseCases` string[] — Integration-level use-case include-filter; absent/empty means all use cases.
      - `monitoredCodes` string[] — Integration-level code scope; absent/empty resolves to ['_error_']. Accepts concrete monitoring error codes or group sentinels (_error_, _warning_, _success_, _info_, _any_, _parent_).
      - `rules` NotificationRule[], required — Enabled triggers and their params. A type MAY repeat; capped at 20 rules (enforced at the write boundary).
        - `id` string — Stable AlertState + baseline key. Optional on write — the server mints a ULID when omitted; a supplied id is preserved verbatim.
        - `name` string — Optional human label disambiguating two rules of the same type.
        - `type` 'critical_error' | 'error_threshold' | 'warning_threshold' | 'success_rate_drop' | 'recovery' | 'silence', required — Rule trigger type. These are the only supported types; each is produced by a real alerter.
        - `enabled` boolean, required
        - `channels` NotificationChannelSet — Delivery channel toggles. New channels added in svc-notification-api inherit here.
          - `email` boolean, required
          - `in_app` boolean, required
        - `codes` string[] — Per-rule code scope. Event-matching rules default to ['_parent_']; silence defaults to ['_any_']. success_rate_drop and recovery take no codes.
        - `threshold` union — Count or percentage; 'auto' selects anomaly-baseline mode.
          - number
          - 'auto'
        - `sensitivity` 'low' | 'medium' | 'high' — Band width for 'auto' mode.
        - `fallbackThreshold` number — Static value used while the 'auto' baseline is immature (cold start).
        - `window` string — Evaluation window, e.g. '15m', '1h', '24h'.
        - `minSampleSize` integer — success_rate_drop minimum sample size guard.
        - `quietPeriod` string — silence quiet period, e.g. '12h'.
      - `digest` NotificationDigestConfig, required — Digest schedule and content configuration.
        - `enabled` boolean, required
        - `frequency` 'daily' | 'weekly', required
        - `dayOfWeek` 0 | 1 | 2 | 3 | 4 | 5 | 6 — Weekly only. 0 = Sunday … 6 = Saturday.
        - `timeOfDay` string, required — HH:mm
        - `timezone` string, required — IANA timezone, e.g. 'Europe/Berlin'.
        - `channels` NotificationChannelSet, required — Delivery channel toggles. New channels added in svc-notification-api inherit here.
          - `email` boolean, required
          - `in_app` boolean, required
        - `includeHealthy` boolean, required — List all integrations vs. only ones with issues.
        - `skipIfEmpty` boolean, required — Suppress the digest when nothing happened.
      - `muteUntil` string, date-time, nullable — ISO instant; snooze all non-digest alerts until this time. `null` means not muted.
  - `integration_type` 'erp' | 'connector' — Type of integration. "erp" is the ERP integration with inbound/outbound use cases. "connector" is for complex proxy integrations with external APIs.
  - `connector_config` ConnectorConfig — Shared configuration for connector-type integrations
    - `base_url` string — Base URL for the partner API
    - `auth` ManagedCallAuth — Authentication configuration for managed call requests
      - `type` 'oauth2_client_credentials' | 'api_key' | 'bearer' — Authentication type
      - `token_url` string — OAuth2 token URL. Can be plain text or {{env.key}} reference.
      - `client_id` string — OAuth2 client ID. Can be plain text or {{env.key}} reference.
      - `client_secret` string — OAuth2 client secret. Must be an {{env.key}} reference (secret).
      - `scope` string — OAuth2 scope
      - `audience` string — OAuth2 audience parameter (e.g. for Auth0, Azure AD). Can be plain text or {{env.key}} reference.
      - `resource` string — OAuth2 resource parameter (e.g. for Azure AD). Can be plain text or {{env.key}} reference.
      - `body_params` object — Additional key-value pairs for the OAuth2 token request body. Values can be {{env.key}} references.
      - `headers` object — Additional headers for the OAuth2 token request. Values can be {{env.key}} references.
      - `query_params` object — Additional query parameters for the OAuth2 token URL. Values can be {{env.key}} references.
      - `api_key_header` string — Header name for API key auth (default X-API-Key)
      - `api_key` string — API key value. Must be an {{env.key}} reference (secret).
      - `token` string — Bearer token value. Must be an {{env.key}} reference (secret).
    - `types_versions` object[] — History of generated type package versions
      - `version` string, required
      - `package_name` string, required
      - `generated_at` string, date-time, required
      - `generated_by` string, required
      - `status` 'active' | 'deprecated', required
    - `latest_types_version` string — Latest active types package version
    - `latest_types_package_name` string — Latest active types package name
  - `protected` boolean — If true, integration is displayed in read-only mode in the UI to discourage changes
  - `_manifest` string[] — The manifest IDs associated with this integration

## Response `200`

Integration updated successfully

- Integration
  - `id` string, uuid, required — Unique identifier for the integration
  - `orgId` string, required — Organization ID
  - `created_at` string, date-time, required — ISO-8601 timestamp when the integration was created
  - `updated_at` string, date-time, required — ISO-8601 timestamp when the integration was last updated
  - `name` string, required — Integration name
  - `description` string — Optional description of the integration
  - `access_token_ids` string[] — List of access token IDs associated with this integration
  - `app_ids` string[] — List of app IDs associated with this integration
  - `environment_config` EnvironmentFieldConfig[] — Configuration defining environment variables needed by this integration. Values are stored in the Environments API.
    - `key` string, required — Environment variable key, used to look up the value in the Environments API.
    - `label` string, required — Display label for the field in the UI
    - `type` 'String' | 'SecretString', required — Whether the value is a plain string or an encrypted secret
    - `description` string — Help text shown below the field
    - `required` boolean — Whether this field must be filled before the integration can be used
    - `order` integer — Sort order for display and drag-to-reorder
  - `settings` IntegrationSettings — Settings for the integration
    - `autoRefresh` AutoRefreshSettings — Auto-refresh settings for keeping integration data fresh
      - `enabled` boolean — Whether auto-refresh is enabled
      - `freshnessThresholdMinutes` integer — Maximum age (in minutes) of data before it is considered stale and eligible for refresh
    - `notifications` IntegrationNotificationConfig — Integration monitoring notification configuration. Rides Integration.settings.notifications (camelCase) and surfaces on both v1 and v2 GET/PUT. Unknown keys are stripped server-side to stay forward-compatible with deferred (V2) rule types.
      - `enabled` boolean, required — Master switch for this integration's notifications.
      - `recipients` NotificationRecipient[], required — epilot user ids notified for this integration. Same-org membership and per-user notification preferences are enforced at send time (Phases 3–5), not at config-write time.
        - `user_id` string, required — epilot user id. Same-org membership is enforced at send time (Phases 3–5), which re-validates each recipient against the integration's org before fanning out — it is not enforced at config-write time.
      - `defaultChannels` NotificationChannelSet, required — Delivery channel toggles. New channels added in svc-notification-api inherit here.
        - `email` boolean, required
        - `in_app` boolean, required
      - `monitoredUseCases` string[] — Integration-level use-case include-filter; absent/empty means all use cases.
      - `monitoredCodes` string[] — Integration-level code scope; absent/empty resolves to ['_error_']. Accepts concrete monitoring error codes or group sentinels (_error_, _warning_, _success_, _info_, _any_, _parent_).
      - `rules` NotificationRule[], required — Enabled triggers and their params. A type MAY repeat; capped at 20 rules (enforced at the write boundary).
        - `id` string — Stable AlertState + baseline key. Optional on write — the server mints a ULID when omitted; a supplied id is preserved verbatim.
        - `name` string — Optional human label disambiguating two rules of the same type.
        - `type` 'critical_error' | 'error_threshold' | 'warning_threshold' | 'success_rate_drop' | 'recovery' | 'silence', required — Rule trigger type. These are the only supported types; each is produced by a real alerter.
        - `enabled` boolean, required
        - `channels` NotificationChannelSet — Delivery channel toggles. New channels added in svc-notification-api inherit here.
          - `email` boolean, required
          - `in_app` boolean, required
        - `codes` string[] — Per-rule code scope. Event-matching rules default to ['_parent_']; silence defaults to ['_any_']. success_rate_drop and recovery take no codes.
        - `threshold` union — Count or percentage; 'auto' selects anomaly-baseline mode.
          - number
          - 'auto'
        - `sensitivity` 'low' | 'medium' | 'high' — Band width for 'auto' mode.
        - `fallbackThreshold` number — Static value used while the 'auto' baseline is immature (cold start).
        - `window` string — Evaluation window, e.g. '15m', '1h', '24h'.
        - `minSampleSize` integer — success_rate_drop minimum sample size guard.
        - `quietPeriod` string — silence quiet period, e.g. '12h'.
      - `digest` NotificationDigestConfig, required — Digest schedule and content configuration.
        - `enabled` boolean, required
        - `frequency` 'daily' | 'weekly', required
        - `dayOfWeek` 0 | 1 | 2 | 3 | 4 | 5 | 6 — Weekly only. 0 = Sunday … 6 = Saturday.
        - `timeOfDay` string, required — HH:mm
        - `timezone` string, required — IANA timezone, e.g. 'Europe/Berlin'.
        - `channels` NotificationChannelSet, required — Delivery channel toggles. New channels added in svc-notification-api inherit here.
          - `email` boolean, required
          - `in_app` boolean, required
        - `includeHealthy` boolean, required — List all integrations vs. only ones with issues.
        - `skipIfEmpty` boolean, required — Suppress the digest when nothing happened.
      - `muteUntil` string, date-time, nullable — ISO instant; snooze all non-digest alerts until this time. `null` means not muted.
  - `integration_type` 'erp' | 'connector' — Type of integration. "erp" is the ERP integration with inbound/outbound use cases. "connector" is for complex proxy integrations with external APIs.
  - `connector_config` ConnectorConfig — Shared configuration for connector-type integrations
    - `base_url` string — Base URL for the partner API
    - `auth` ManagedCallAuth — Authentication configuration for managed call requests
      - `type` 'oauth2_client_credentials' | 'api_key' | 'bearer' — Authentication type
      - `token_url` string — OAuth2 token URL. Can be plain text or {{env.key}} reference.
      - `client_id` string — OAuth2 client ID. Can be plain text or {{env.key}} reference.
      - `client_secret` string — OAuth2 client secret. Must be an {{env.key}} reference (secret).
      - `scope` string — OAuth2 scope
      - `audience` string — OAuth2 audience parameter (e.g. for Auth0, Azure AD). Can be plain text or {{env.key}} reference.
      - `resource` string — OAuth2 resource parameter (e.g. for Azure AD). Can be plain text or {{env.key}} reference.
      - `body_params` object — Additional key-value pairs for the OAuth2 token request body. Values can be {{env.key}} references.
      - `headers` object — Additional headers for the OAuth2 token request. Values can be {{env.key}} references.
      - `query_params` object — Additional query parameters for the OAuth2 token URL. Values can be {{env.key}} references.
      - `api_key_header` string — Header name for API key auth (default X-API-Key)
      - `api_key` string — API key value. Must be an {{env.key}} reference (secret).
      - `token` string — Bearer token value. Must be an {{env.key}} reference (secret).
    - `types_versions` object[] — History of generated type package versions
      - `version` string, required
      - `package_name` string, required
      - `generated_at` string, date-time, required
      - `generated_by` string, required
      - `status` 'active' | 'deprecated', required
    - `latest_types_version` string — Latest active types package version
    - `latest_types_package_name` string — Latest active types package name
  - `protected` boolean — If true, integration is displayed in read-only mode in the UI to discourage changes
  - `_manifest` string[] — The manifest IDs associated with this integration

## Other responses

- `400` — Bad request
- `401` — Unauthorized request
- `404` — Integration not found
- `500` — Internal Server Error

---

[API](https://skmtc.net/epilot/apis/integration-toolkit-api.md) · [All operations](https://skmtc.net/epilot/apis/integration-toolkit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/epilot/integration-toolkit-api/revisions/c24837d75096/schema)
