---
title: "Update"
method: POST
path: "/api/v1/apps/{app_id}/edges/{id}"
tags: ["Edge"]
---

# Update

`POST /api/v1/apps/{app_id}/edges/{id}`

## Request

- Base URL: `https://example.conductor.one`
- URL: `https://example.conductor.one/api/v1/apps/{app_id}/edges/{id}`
- Auth: HTTP bearer and OAuth 2
  - Client credentials
  - Token URL: `/auth/v1/token`

Update edits an Edge's mode, credential injections, or inference route via update_mask.

## Path parameters

- `app_id` string, required: App identifier.
- `id` string, required: The id field.

## Request body

- C1ApiEdgeV1EdgeServiceUpdateRequestInput: EdgeServiceUpdateRequest updates an existing Edge via update_mask. Editable paths: mode, enabled_kinds, egress_rules, credential_injections, inference_routes, allow_inference_bearer_tokens. The legacy inference mask may clear or replace one graph.
  - `edge` C1ApiEdgeV1Edge: Edge is an application-owned configuration for egress and inference services.
    - `allowInferenceBearerTokens` boolean: Opt in to short-lived inference Bearer credentials; false by default. Enforcement requires a runtime that consumes this setting.
    - `appId` string: App identifier.
    - `createdAt` string, date-time, nullable
    - `credentialInjections` C1ApiEdgeV1EdgeCredentialInjection[], nullable: Vault-backed headers the hosted Edge adds to matching egress requests. Grant the vault's OpenSecret entitlement to the Edge's service principal.
      - `contentType` string: The secret's stored content type. Defaults to "api_key".
      - `headerName` string: Header to set, replacing any value supplied by the caller.
      - `hostPattern` string: Destination host glob, e.g. "api.example.com" or "*.example.com".
      - `pathPattern` string: Request path glob, e.g. "/v1/*". Empty matches every path.
      - `secretId` string: Secret to inject.
      - `valuePrefix` string: Literal text placed before the secret value, e.g. "Bearer ".
      - `vaultId` string: Vault holding the secret.
    - `displayName` string: The displayName field.
    - `egressConnectEntitlementId` string: The minted egress.connect entitlement (derived from the Edge id) -- grant it to a caller to let it open an authenticated egress connection. Empty when egress is not in enabled_kinds.
    - `egressRules` C1ApiEdgeV1EdgeEgressRule[], nullable: Ordered egress access rules, evaluated first-match-wins with default deny when none match. Order is significant: a customer expresses "allow all except this one user" by placing the specific rule first.
      - `allowEmptyEncodedBody` boolean: When true, a response or request whose declared Content-Encoding is a supported token (gzip, x-gzip, deflate, br, zstd) but whose body is empty or decodes to zero bytes is treated as an empty plaintext instead of failing closed. Off by default. Only meaningful on ALLOW rules.
      - `allowResponseDecodeRefusals` boolean: When true, a decode refusal raised while recursively decoding content nested inside a RESPONSE body (e.g. a gzip-looking byte run in a binary download that fails to inflate, an embedded encoding past the depth/size bounds) is recorded but does not by itself block the response. Confirmed findings (credentials, keys, PANs) still apply. Off by default. Only meaningful on ALLOW rules.
      - `authzen` C1ApiEdgeV1AuthzenRef: AuthzenRef names an AuthzenServer. An empty app_id means the Edge's own app for rules saved before cross-app references were supported.
        - `appId` string: App that owns the AuthzenServer. Empty resolves to the Edge's app.
        - `serverId` string: ID of the AuthzenServer. It must exist in the target app and be in OBSERVE or ENFORCE mode.
      - `effect` 'EDGE_EGRESS_EFFECT_UNSPECIFIED' | 'EDGE_EGRESS_EFFECT_ALLOW' | 'EDGE_EGRESS_EFFECT_DENY' | 'EDGE_EGRESS_EFFECT_AUTHZEN': The effect field.
      - `endpointPattern` string: Destination host to match: exact hostname, or a single leading "*." wildcard for subdomains (e.g. "*.example.com"). Port and path are out of scope for v1.
      - `exemptCredentialKinds` string[], nullable: Content-inspection finding classes this rule exempts from blocking on the *request* path, since the destination is already trusted for this principal. Never applies to response content; see exempt_response_credential_kinds for that, deliberately independent.
      - `exemptResponseCredentialKinds` string[], nullable: Content-inspection finding classes this rule exempts from blocking on the *response* path -- e.g. a destination's own credential-issuance reply (temporary cloud credentials, a continuation token) that the caller's own service legitimately needs to consume. Deliberately a separate list from exempt_credential_kinds, defaulting empty: trusting a destination's outbound credential never implies trusting whatever it sends back, and an admin must opt a kind into this list explicitly.
      - `maxInspectedBodyBytes` string, uint64: Overrides, for destinations matching this rule, the largest body (in bytes) Time Bandit buffers for content inspection. 0 means unset: Time Bandit uses its fleet default (1 MiB). A body above the limit is still refused (fail closed) and is never forwarded uninspected. Only meaningful on ALLOW rules. Applies whether or not skip_content_inspection is set.
      - `principal` C1ApiEdgeV1EdgeEgressPrincipal: EdgeEgressPrincipal is the caller a rule matches against. Exactly one arm must be set. This message contains a oneof named scope. Only a single field of the following list may be set at a time: - all - userId - entitlementId
        - `all` boolean, nullable: The all field. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
        - `entitlementId` string, nullable: An App Entitlement belonging to the same App the Edge belongs to. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
        - `userId` string, nullable: The userId field. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
      - `skipContentInspection` boolean: When true, decoding is optional for destinations matching this rule; inspection is not. Despite the name, this does NOT skip content inspection: every detector, guardrail and header scan still runs and any finding still denies. It only changes what happens when a body declares a Content-Encoding that Time Bandit has no decoder for. Without the flag the body is denied (fail closed); with it, the bytes are scanned as-is through the normal cascade. Trade-off: a secret inside genuine compression labelled with an unsupported token is not caught (plaintext and gzip still are). A supported encoding that is malformed or truncated, decoded output over the inspection cap, and bodies over the wire cap still fail closed. Off by default. Only meaningful on ALLOW rules.
    - `egressRulesConfigured` boolean: Whether egress_rules has ever been deliberately set (via an update_mask naming it), regardless of the resulting list's length. False means this Edge has never touched the feature -- egress is not destination-restricted -- even though egress_rules reads empty either way; true with an empty egress_rules means every destination is deliberately denied.
    - `enabledKinds` string[], nullable: The capabilities this Edge currently serves. A request naming a resource for a capability outside this set is denied, independent of mode. At least one kind is required.
    - `id` string: The id field.
    - `inference` C1ApiEdgeV1EdgeInferenceRoute: EdgeInferenceRoute declares a caller-visible model selector and a bounded provider graph. Legacy scalar fields decode previously stored singletons; new configurations use native_format, targets, and selection.
      - `allowHumanCallers` boolean: Explicitly authorize enabled human users holding per-capability app grants to exchange an SSO id_token with DPoP. False preserves workload-only routes.
      - `callerServicePrincipalId` string: Required in workload mode; forbidden when allow_human_callers is true. Workload callers must hold both inference capability grants.
      - `callerWorkloadFederationTrustId` string: The workload caller's exact federation trust; forbidden in human mode.
      - `contentType` string: The contentType field.
      - `expectedSecretVersion` string: Deprecated setup-time pin. New writes must leave it empty; the runtime resolves the active version of each target's Vault secret.
      - `followedTier` 'EDGE_INFERENCE_TIER_UNSPECIFIED' | 'EDGE_INFERENCE_TIER_FAST' | 'EDGE_INFERENCE_TIER_BALANCED' | 'EDGE_INFERENCE_TIER_BEST': C1 tier this route follows; UNSPECIFIED means it follows no tier. On write, a route that sets a tier must use the route_id c1-<tier>; the server replaces its targets and selection with the tier's current model, served through the providers this Edge already has credentials for, and also publishes that model's name as a second route. Clearing the tier (and publication) on a published route pins it to its current targets.
      - `nativeFormat` 'EDGE_INFERENCE_NATIVE_FORMAT_UNSPECIFIED' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_RESPONSES' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_CHAT' | 'EDGE_INFERENCE_NATIVE_FORMAT_ANTHROPIC_MESSAGES': Accepted native client request format; never inferred from caller headers.
      - `publication` 'EDGE_INFERENCE_ROUTE_PUBLICATION_UNSPECIFIED' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_TIER' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_MODEL_ALIAS': Which C1-published route of a followed tier this is. Set by the server; send back the value you read. UNSPECIFIED for a tenant-authored route.
      - `registryModelId` string: Registry model the route was built from; empty for a custom model.
      - `routeId` string: Tenant-owned route identifier, unique within the tenant. ListInferenceRoutes reports routes already configured for this application, not an allowlist.
      - `secretId` string: The secretId field.
      - `selection` C1ApiEdgeV1EdgeInferenceSelection: The EdgeInferenceSelection message.
        - `attemptTimeoutMs` integer: The attemptTimeoutMs field.
        - `confidenceThreshold` number: The confidenceThreshold field.
        - `handoffNotes` C1ApiEdgeV1EdgeInferenceHandoffNotes: The EdgeInferenceHandoffNotes message.
          - `deescalationNote` string: The deescalationNote field.
          - `escalationNote` string: The escalationNote field.
          - `onlyOnWrongSignalEscalation` boolean: The onlyOnWrongSignalEscalation field.
        - `maxAttempts` integer: The maxAttempts field.
        - `pickerMode` 'EDGE_INFERENCE_STAGE_PICKER_MODE_UNSPECIFIED' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_EFFICIENT_FIRST' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_CAPABLE_FIRST': The pickerMode field.
        - `recentWindow` integer: The recentWindow field.
        - `retry` C1ApiEdgeV1EdgeInferenceRetry: Bounds the delay between provider attempts on one route. Only transient provider failures (rate limit, provider timeout, overload, a pre-response transport failure, a generic upstream error) ever wait; credential, policy, configuration and other 4xx rejections stay terminal.
          - `baseMs` integer: First backoff ceiling in milliseconds; doubles per consecutive transient failure in one provider traversal, up to the cap. Zero disables backoff.
          - `capMs` integer: Largest delay in milliseconds, including a clamped provider Retry-After.
          - `jitter` boolean: Draw each delay uniformly from zero to the ceiling instead of waiting the ceiling exactly.
          - `maxSameTargetRetries` integer: Extra attempts against the same target after a transient failure, before failing over. Each one spends one of the route's attempts.
        - `routeDeadlineMs` integer: The routeDeadlineMs field.
        - `stages` C1ApiEdgeV1EdgeInferenceStage[], nullable: The stages field.
          - `judge` C1ApiEdgeV1EdgeInferenceJudge: The EdgeInferenceJudge message.
            - `baseThreshold` number: The baseThreshold field.
            - `maxOutputTokens` integer: Maximum tokens available to classify a stage result (1 to 16,384).
            - `prompt` string: The prompt field.
            - `recentTurnWindow` integer: The recentTurnWindow field.
            - `thresholdStep` number: The thresholdStep field.
          - `judgeTargetId` string: The judgeTargetId field.
          - `stageId` string: The stageId field.
          - `targetIds` string[], nullable: The targetIds field.
          - `tierPrompt` string: The tierPrompt field.
        - `strategy` 'EDGE_INFERENCE_SELECTION_STRATEGY_UNSPECIFIED' | 'EDGE_INFERENCE_SELECTION_STRATEGY_SINGLE' | 'EDGE_INFERENCE_SELECTION_STRATEGY_FAILOVER' | 'EDGE_INFERENCE_SELECTION_STRATEGY_STAGE_ROUTER': The strategy field.
        - `targetIds` string[], nullable: The targetIds field.
      - `targets` C1ApiEdgeV1EdgeInferenceTarget[], nullable: Explicit upstream targets; no request may choose a target or destination.
        - `catalogEntryId` string: Catalog entry and variant to expand on write. Set both with target_id, upstream_model_id, region (AWS variants) and the secret reference; the server fills the provider profile, destination, credential source and recipe, content type, upstream path and model id grammar from the variant. Other provider fields must be unset or match the variant.
        - `catalogVariantId` string: The catalogVariantId field.
        - `circuitBreaker` C1ApiEdgeV1EdgeInferenceCircuitBreaker: The EdgeInferenceCircuitBreaker message.
          - `cooldownMs` integer: The cooldownMs field.
          - `failureThreshold` integer: The failureThreshold field.
        - `contentType` string: The contentType field.
        - `contextLength` integer: The contextLength field.
        - `credentialFailurePolicy` C1ApiEdgeV1EdgeInferenceCredentialFailurePolicy: The EdgeInferenceCredentialFailurePolicy message.
          - `notApplicable` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The notApplicable field.
          - `rejected401` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The rejected401 field.
          - `unavailableOrExpired` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The unavailableOrExpired field.
        - `credentialRecipe` string: The credentialRecipe field.
        - `credentialSource` 'EDGE_INFERENCE_CREDENTIAL_SOURCE_UNSPECIFIED' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_TENANT_VAULT' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_AWS_WORKLOAD_IDENTITY': The credentialSource field.
        - `destination` string: Empty only when a catalog variant expands it.
        - `expectedSecretVersion` string: Output-only: resolved active version in the distributed configuration.
        - `modelIdGrammar` string: The modelIdGrammar field.
        - `providerProfile` string: Empty only when catalog_entry_id and catalog_variant_id expand it; the expanded target is validated in full.
        - `reasoningEffort` string: The reasoningEffort field.
        - `region` string: The region field.
        - `secretId` string: The secretId field.
        - `targetId` string: The targetId field.
        - `upstreamModelId` string: The upstreamModelId field.
        - `upstreamPath` string: The upstreamPath field.
        - `vaultBoundaryId` string: The vaultBoundaryId field.
      - `upstreamModelId` string: Legacy singleton model, empty for graph routes.
      - `vaultBoundaryId` string: Legacy singleton Vault reference, empty for graph routes.
    - `inferenceInvokeEntitlementId` string: The minted inference.invoke entitlement (derived from the Edge id). Empty when inference is not in enabled_kinds.
    - `inferenceModelsReadEntitlementId` string: The minted inference.models.read entitlement (derived from the Edge id). Empty when inference is not in enabled_kinds.
    - `inferenceRoutes` C1ApiEdgeV1EdgeInferenceRoute[], nullable: Complete ordered set of tenant-unique inference routes. update_mask "inference_routes" atomically replaces the entire set (including empty). Up to 40 routes per Edge; replacing a set is atomic.
      - `allowHumanCallers` boolean: Explicitly authorize enabled human users holding per-capability app grants to exchange an SSO id_token with DPoP. False preserves workload-only routes.
      - `callerServicePrincipalId` string: Required in workload mode; forbidden when allow_human_callers is true. Workload callers must hold both inference capability grants.
      - `callerWorkloadFederationTrustId` string: The workload caller's exact federation trust; forbidden in human mode.
      - `contentType` string: The contentType field.
      - `expectedSecretVersion` string: Deprecated setup-time pin. New writes must leave it empty; the runtime resolves the active version of each target's Vault secret.
      - `followedTier` 'EDGE_INFERENCE_TIER_UNSPECIFIED' | 'EDGE_INFERENCE_TIER_FAST' | 'EDGE_INFERENCE_TIER_BALANCED' | 'EDGE_INFERENCE_TIER_BEST': C1 tier this route follows; UNSPECIFIED means it follows no tier. On write, a route that sets a tier must use the route_id c1-<tier>; the server replaces its targets and selection with the tier's current model, served through the providers this Edge already has credentials for, and also publishes that model's name as a second route. Clearing the tier (and publication) on a published route pins it to its current targets.
      - `nativeFormat` 'EDGE_INFERENCE_NATIVE_FORMAT_UNSPECIFIED' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_RESPONSES' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_CHAT' | 'EDGE_INFERENCE_NATIVE_FORMAT_ANTHROPIC_MESSAGES': Accepted native client request format; never inferred from caller headers.
      - `publication` 'EDGE_INFERENCE_ROUTE_PUBLICATION_UNSPECIFIED' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_TIER' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_MODEL_ALIAS': Which C1-published route of a followed tier this is. Set by the server; send back the value you read. UNSPECIFIED for a tenant-authored route.
      - `registryModelId` string: Registry model the route was built from; empty for a custom model.
      - `routeId` string: Tenant-owned route identifier, unique within the tenant. ListInferenceRoutes reports routes already configured for this application, not an allowlist.
      - `secretId` string: The secretId field.
      - `selection` C1ApiEdgeV1EdgeInferenceSelection: The EdgeInferenceSelection message.
        - `attemptTimeoutMs` integer: The attemptTimeoutMs field.
        - `confidenceThreshold` number: The confidenceThreshold field.
        - `handoffNotes` C1ApiEdgeV1EdgeInferenceHandoffNotes: The EdgeInferenceHandoffNotes message.
          - `deescalationNote` string: The deescalationNote field.
          - `escalationNote` string: The escalationNote field.
          - `onlyOnWrongSignalEscalation` boolean: The onlyOnWrongSignalEscalation field.
        - `maxAttempts` integer: The maxAttempts field.
        - `pickerMode` 'EDGE_INFERENCE_STAGE_PICKER_MODE_UNSPECIFIED' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_EFFICIENT_FIRST' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_CAPABLE_FIRST': The pickerMode field.
        - `recentWindow` integer: The recentWindow field.
        - `retry` C1ApiEdgeV1EdgeInferenceRetry: Bounds the delay between provider attempts on one route. Only transient provider failures (rate limit, provider timeout, overload, a pre-response transport failure, a generic upstream error) ever wait; credential, policy, configuration and other 4xx rejections stay terminal.
          - `baseMs` integer: First backoff ceiling in milliseconds; doubles per consecutive transient failure in one provider traversal, up to the cap. Zero disables backoff.
          - `capMs` integer: Largest delay in milliseconds, including a clamped provider Retry-After.
          - `jitter` boolean: Draw each delay uniformly from zero to the ceiling instead of waiting the ceiling exactly.
          - `maxSameTargetRetries` integer: Extra attempts against the same target after a transient failure, before failing over. Each one spends one of the route's attempts.
        - `routeDeadlineMs` integer: The routeDeadlineMs field.
        - `stages` C1ApiEdgeV1EdgeInferenceStage[], nullable: The stages field.
          - `judge` C1ApiEdgeV1EdgeInferenceJudge: The EdgeInferenceJudge message.
            - `baseThreshold` number: The baseThreshold field.
            - `maxOutputTokens` integer: Maximum tokens available to classify a stage result (1 to 16,384).
            - `prompt` string: The prompt field.
            - `recentTurnWindow` integer: The recentTurnWindow field.
            - `thresholdStep` number: The thresholdStep field.
          - `judgeTargetId` string: The judgeTargetId field.
          - `stageId` string: The stageId field.
          - `targetIds` string[], nullable: The targetIds field.
          - `tierPrompt` string: The tierPrompt field.
        - `strategy` 'EDGE_INFERENCE_SELECTION_STRATEGY_UNSPECIFIED' | 'EDGE_INFERENCE_SELECTION_STRATEGY_SINGLE' | 'EDGE_INFERENCE_SELECTION_STRATEGY_FAILOVER' | 'EDGE_INFERENCE_SELECTION_STRATEGY_STAGE_ROUTER': The strategy field.
        - `targetIds` string[], nullable: The targetIds field.
      - `targets` C1ApiEdgeV1EdgeInferenceTarget[], nullable: Explicit upstream targets; no request may choose a target or destination.
        - `catalogEntryId` string: Catalog entry and variant to expand on write. Set both with target_id, upstream_model_id, region (AWS variants) and the secret reference; the server fills the provider profile, destination, credential source and recipe, content type, upstream path and model id grammar from the variant. Other provider fields must be unset or match the variant.
        - `catalogVariantId` string: The catalogVariantId field.
        - `circuitBreaker` C1ApiEdgeV1EdgeInferenceCircuitBreaker: The EdgeInferenceCircuitBreaker message.
          - `cooldownMs` integer: The cooldownMs field.
          - `failureThreshold` integer: The failureThreshold field.
        - `contentType` string: The contentType field.
        - `contextLength` integer: The contextLength field.
        - `credentialFailurePolicy` C1ApiEdgeV1EdgeInferenceCredentialFailurePolicy: The EdgeInferenceCredentialFailurePolicy message.
          - `notApplicable` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The notApplicable field.
          - `rejected401` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The rejected401 field.
          - `unavailableOrExpired` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The unavailableOrExpired field.
        - `credentialRecipe` string: The credentialRecipe field.
        - `credentialSource` 'EDGE_INFERENCE_CREDENTIAL_SOURCE_UNSPECIFIED' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_TENANT_VAULT' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_AWS_WORKLOAD_IDENTITY': The credentialSource field.
        - `destination` string: Empty only when a catalog variant expands it.
        - `expectedSecretVersion` string: Output-only: resolved active version in the distributed configuration.
        - `modelIdGrammar` string: The modelIdGrammar field.
        - `providerProfile` string: Empty only when catalog_entry_id and catalog_variant_id expand it; the expanded target is validated in full.
        - `reasoningEffort` string: The reasoningEffort field.
        - `region` string: The region field.
        - `secretId` string: The secretId field.
        - `targetId` string: The targetId field.
        - `upstreamModelId` string: The upstreamModelId field.
        - `upstreamPath` string: The upstreamPath field.
        - `vaultBoundaryId` string: The vaultBoundaryId field.
      - `upstreamModelId` string: Legacy singleton model, empty for graph routes.
      - `vaultBoundaryId` string: Legacy singleton Vault reference, empty for graph routes.
    - `mode` 'EDGE_MODE_UNSPECIFIED' | 'EDGE_MODE_DISABLED' | 'EDGE_MODE_OBSERVE' | 'EDGE_MODE_ENFORCE': Hosting state for the service configuration. DISABLED and UNSPECIFIED deny every request. ENFORCE and OBSERVE both still require capability authorization; content policy and routing remain configured on the Edge host. OBSERVE is currently identical to ENFORCE -- it exists so an operator can stage an Edge ahead of destination-level policy support, which does not exist yet.
    - `tokenAudience` string: The `audience` to send when exchanging a token for access to this Edge. Every Edge deployment in the tenant shares it, so it names the service; `token_resources` identify its service endpoints.
    - `tokenResources` C1ApiEdgeV1EdgeTokenResources: EdgeTokenResources names the resource URI for each supported Edge service. A field is empty when its capability is not in enabled_kinds.
      - `egress` string: Resource URI used with the egress.connect scope.
      - `inference` string: Resource URI used with the inference.models.read / inference.invoke scopes.
    - `tokenScopes` string[], nullable: The scopes this Edge can issue. Explicit requests fail if any scope is ungranted; an omitted scope requests the granted capabilities of each resource.
    - `updatedAt` string, date-time, nullable
  - `updateMask` string, nullable

## Response `200`

EdgeServiceUpdateResponse returns the updated Edge.

- C1ApiEdgeV1EdgeServiceUpdateResponse: EdgeServiceUpdateResponse returns the updated Edge.
  - `edge` C1ApiEdgeV1Edge: Edge is an application-owned configuration for egress and inference services.
    - `allowInferenceBearerTokens` boolean: Opt in to short-lived inference Bearer credentials; false by default. Enforcement requires a runtime that consumes this setting.
    - `appId` string: App identifier.
    - `createdAt` string, date-time, nullable
    - `credentialInjections` C1ApiEdgeV1EdgeCredentialInjection[], nullable: Vault-backed headers the hosted Edge adds to matching egress requests. Grant the vault's OpenSecret entitlement to the Edge's service principal.
      - `contentType` string: The secret's stored content type. Defaults to "api_key".
      - `headerName` string: Header to set, replacing any value supplied by the caller.
      - `hostPattern` string: Destination host glob, e.g. "api.example.com" or "*.example.com".
      - `pathPattern` string: Request path glob, e.g. "/v1/*". Empty matches every path.
      - `secretId` string: Secret to inject.
      - `valuePrefix` string: Literal text placed before the secret value, e.g. "Bearer ".
      - `vaultId` string: Vault holding the secret.
    - `displayName` string: The displayName field.
    - `egressConnectEntitlementId` string: The minted egress.connect entitlement (derived from the Edge id) -- grant it to a caller to let it open an authenticated egress connection. Empty when egress is not in enabled_kinds.
    - `egressRules` C1ApiEdgeV1EdgeEgressRule[], nullable: Ordered egress access rules, evaluated first-match-wins with default deny when none match. Order is significant: a customer expresses "allow all except this one user" by placing the specific rule first.
      - `allowEmptyEncodedBody` boolean: When true, a response or request whose declared Content-Encoding is a supported token (gzip, x-gzip, deflate, br, zstd) but whose body is empty or decodes to zero bytes is treated as an empty plaintext instead of failing closed. Off by default. Only meaningful on ALLOW rules.
      - `allowResponseDecodeRefusals` boolean: When true, a decode refusal raised while recursively decoding content nested inside a RESPONSE body (e.g. a gzip-looking byte run in a binary download that fails to inflate, an embedded encoding past the depth/size bounds) is recorded but does not by itself block the response. Confirmed findings (credentials, keys, PANs) still apply. Off by default. Only meaningful on ALLOW rules.
      - `authzen` C1ApiEdgeV1AuthzenRef: AuthzenRef names an AuthzenServer. An empty app_id means the Edge's own app for rules saved before cross-app references were supported.
        - `appId` string: App that owns the AuthzenServer. Empty resolves to the Edge's app.
        - `serverId` string: ID of the AuthzenServer. It must exist in the target app and be in OBSERVE or ENFORCE mode.
      - `effect` 'EDGE_EGRESS_EFFECT_UNSPECIFIED' | 'EDGE_EGRESS_EFFECT_ALLOW' | 'EDGE_EGRESS_EFFECT_DENY' | 'EDGE_EGRESS_EFFECT_AUTHZEN': The effect field.
      - `endpointPattern` string: Destination host to match: exact hostname, or a single leading "*." wildcard for subdomains (e.g. "*.example.com"). Port and path are out of scope for v1.
      - `exemptCredentialKinds` string[], nullable: Content-inspection finding classes this rule exempts from blocking on the *request* path, since the destination is already trusted for this principal. Never applies to response content; see exempt_response_credential_kinds for that, deliberately independent.
      - `exemptResponseCredentialKinds` string[], nullable: Content-inspection finding classes this rule exempts from blocking on the *response* path -- e.g. a destination's own credential-issuance reply (temporary cloud credentials, a continuation token) that the caller's own service legitimately needs to consume. Deliberately a separate list from exempt_credential_kinds, defaulting empty: trusting a destination's outbound credential never implies trusting whatever it sends back, and an admin must opt a kind into this list explicitly.
      - `maxInspectedBodyBytes` string, uint64: Overrides, for destinations matching this rule, the largest body (in bytes) Time Bandit buffers for content inspection. 0 means unset: Time Bandit uses its fleet default (1 MiB). A body above the limit is still refused (fail closed) and is never forwarded uninspected. Only meaningful on ALLOW rules. Applies whether or not skip_content_inspection is set.
      - `principal` C1ApiEdgeV1EdgeEgressPrincipal: EdgeEgressPrincipal is the caller a rule matches against. Exactly one arm must be set. This message contains a oneof named scope. Only a single field of the following list may be set at a time: - all - userId - entitlementId
        - `all` boolean, nullable: The all field. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
        - `entitlementId` string, nullable: An App Entitlement belonging to the same App the Edge belongs to. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
        - `userId` string, nullable: The userId field. This field is part of the `scope` oneof. See the documentation for `c1.api.edge.v1.EdgeEgressPrincipal` for more details.
      - `skipContentInspection` boolean: When true, decoding is optional for destinations matching this rule; inspection is not. Despite the name, this does NOT skip content inspection: every detector, guardrail and header scan still runs and any finding still denies. It only changes what happens when a body declares a Content-Encoding that Time Bandit has no decoder for. Without the flag the body is denied (fail closed); with it, the bytes are scanned as-is through the normal cascade. Trade-off: a secret inside genuine compression labelled with an unsupported token is not caught (plaintext and gzip still are). A supported encoding that is malformed or truncated, decoded output over the inspection cap, and bodies over the wire cap still fail closed. Off by default. Only meaningful on ALLOW rules.
    - `egressRulesConfigured` boolean: Whether egress_rules has ever been deliberately set (via an update_mask naming it), regardless of the resulting list's length. False means this Edge has never touched the feature -- egress is not destination-restricted -- even though egress_rules reads empty either way; true with an empty egress_rules means every destination is deliberately denied.
    - `enabledKinds` string[], nullable: The capabilities this Edge currently serves. A request naming a resource for a capability outside this set is denied, independent of mode. At least one kind is required.
    - `id` string: The id field.
    - `inference` C1ApiEdgeV1EdgeInferenceRoute: EdgeInferenceRoute declares a caller-visible model selector and a bounded provider graph. Legacy scalar fields decode previously stored singletons; new configurations use native_format, targets, and selection.
      - `allowHumanCallers` boolean: Explicitly authorize enabled human users holding per-capability app grants to exchange an SSO id_token with DPoP. False preserves workload-only routes.
      - `callerServicePrincipalId` string: Required in workload mode; forbidden when allow_human_callers is true. Workload callers must hold both inference capability grants.
      - `callerWorkloadFederationTrustId` string: The workload caller's exact federation trust; forbidden in human mode.
      - `contentType` string: The contentType field.
      - `expectedSecretVersion` string: Deprecated setup-time pin. New writes must leave it empty; the runtime resolves the active version of each target's Vault secret.
      - `followedTier` 'EDGE_INFERENCE_TIER_UNSPECIFIED' | 'EDGE_INFERENCE_TIER_FAST' | 'EDGE_INFERENCE_TIER_BALANCED' | 'EDGE_INFERENCE_TIER_BEST': C1 tier this route follows; UNSPECIFIED means it follows no tier. On write, a route that sets a tier must use the route_id c1-<tier>; the server replaces its targets and selection with the tier's current model, served through the providers this Edge already has credentials for, and also publishes that model's name as a second route. Clearing the tier (and publication) on a published route pins it to its current targets.
      - `nativeFormat` 'EDGE_INFERENCE_NATIVE_FORMAT_UNSPECIFIED' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_RESPONSES' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_CHAT' | 'EDGE_INFERENCE_NATIVE_FORMAT_ANTHROPIC_MESSAGES': Accepted native client request format; never inferred from caller headers.
      - `publication` 'EDGE_INFERENCE_ROUTE_PUBLICATION_UNSPECIFIED' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_TIER' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_MODEL_ALIAS': Which C1-published route of a followed tier this is. Set by the server; send back the value you read. UNSPECIFIED for a tenant-authored route.
      - `registryModelId` string: Registry model the route was built from; empty for a custom model.
      - `routeId` string: Tenant-owned route identifier, unique within the tenant. ListInferenceRoutes reports routes already configured for this application, not an allowlist.
      - `secretId` string: The secretId field.
      - `selection` C1ApiEdgeV1EdgeInferenceSelection: The EdgeInferenceSelection message.
        - `attemptTimeoutMs` integer: The attemptTimeoutMs field.
        - `confidenceThreshold` number: The confidenceThreshold field.
        - `handoffNotes` C1ApiEdgeV1EdgeInferenceHandoffNotes: The EdgeInferenceHandoffNotes message.
          - `deescalationNote` string: The deescalationNote field.
          - `escalationNote` string: The escalationNote field.
          - `onlyOnWrongSignalEscalation` boolean: The onlyOnWrongSignalEscalation field.
        - `maxAttempts` integer: The maxAttempts field.
        - `pickerMode` 'EDGE_INFERENCE_STAGE_PICKER_MODE_UNSPECIFIED' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_EFFICIENT_FIRST' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_CAPABLE_FIRST': The pickerMode field.
        - `recentWindow` integer: The recentWindow field.
        - `retry` C1ApiEdgeV1EdgeInferenceRetry: Bounds the delay between provider attempts on one route. Only transient provider failures (rate limit, provider timeout, overload, a pre-response transport failure, a generic upstream error) ever wait; credential, policy, configuration and other 4xx rejections stay terminal.
          - `baseMs` integer: First backoff ceiling in milliseconds; doubles per consecutive transient failure in one provider traversal, up to the cap. Zero disables backoff.
          - `capMs` integer: Largest delay in milliseconds, including a clamped provider Retry-After.
          - `jitter` boolean: Draw each delay uniformly from zero to the ceiling instead of waiting the ceiling exactly.
          - `maxSameTargetRetries` integer: Extra attempts against the same target after a transient failure, before failing over. Each one spends one of the route's attempts.
        - `routeDeadlineMs` integer: The routeDeadlineMs field.
        - `stages` C1ApiEdgeV1EdgeInferenceStage[], nullable: The stages field.
          - `judge` C1ApiEdgeV1EdgeInferenceJudge: The EdgeInferenceJudge message.
            - `baseThreshold` number: The baseThreshold field.
            - `maxOutputTokens` integer: Maximum tokens available to classify a stage result (1 to 16,384).
            - `prompt` string: The prompt field.
            - `recentTurnWindow` integer: The recentTurnWindow field.
            - `thresholdStep` number: The thresholdStep field.
          - `judgeTargetId` string: The judgeTargetId field.
          - `stageId` string: The stageId field.
          - `targetIds` string[], nullable: The targetIds field.
          - `tierPrompt` string: The tierPrompt field.
        - `strategy` 'EDGE_INFERENCE_SELECTION_STRATEGY_UNSPECIFIED' | 'EDGE_INFERENCE_SELECTION_STRATEGY_SINGLE' | 'EDGE_INFERENCE_SELECTION_STRATEGY_FAILOVER' | 'EDGE_INFERENCE_SELECTION_STRATEGY_STAGE_ROUTER': The strategy field.
        - `targetIds` string[], nullable: The targetIds field.
      - `targets` C1ApiEdgeV1EdgeInferenceTarget[], nullable: Explicit upstream targets; no request may choose a target or destination.
        - `catalogEntryId` string: Catalog entry and variant to expand on write. Set both with target_id, upstream_model_id, region (AWS variants) and the secret reference; the server fills the provider profile, destination, credential source and recipe, content type, upstream path and model id grammar from the variant. Other provider fields must be unset or match the variant.
        - `catalogVariantId` string: The catalogVariantId field.
        - `circuitBreaker` C1ApiEdgeV1EdgeInferenceCircuitBreaker: The EdgeInferenceCircuitBreaker message.
          - `cooldownMs` integer: The cooldownMs field.
          - `failureThreshold` integer: The failureThreshold field.
        - `contentType` string: The contentType field.
        - `contextLength` integer: The contextLength field.
        - `credentialFailurePolicy` C1ApiEdgeV1EdgeInferenceCredentialFailurePolicy: The EdgeInferenceCredentialFailurePolicy message.
          - `notApplicable` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The notApplicable field.
          - `rejected401` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The rejected401 field.
          - `unavailableOrExpired` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The unavailableOrExpired field.
        - `credentialRecipe` string: The credentialRecipe field.
        - `credentialSource` 'EDGE_INFERENCE_CREDENTIAL_SOURCE_UNSPECIFIED' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_TENANT_VAULT' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_AWS_WORKLOAD_IDENTITY': The credentialSource field.
        - `destination` string: Empty only when a catalog variant expands it.
        - `expectedSecretVersion` string: Output-only: resolved active version in the distributed configuration.
        - `modelIdGrammar` string: The modelIdGrammar field.
        - `providerProfile` string: Empty only when catalog_entry_id and catalog_variant_id expand it; the expanded target is validated in full.
        - `reasoningEffort` string: The reasoningEffort field.
        - `region` string: The region field.
        - `secretId` string: The secretId field.
        - `targetId` string: The targetId field.
        - `upstreamModelId` string: The upstreamModelId field.
        - `upstreamPath` string: The upstreamPath field.
        - `vaultBoundaryId` string: The vaultBoundaryId field.
      - `upstreamModelId` string: Legacy singleton model, empty for graph routes.
      - `vaultBoundaryId` string: Legacy singleton Vault reference, empty for graph routes.
    - `inferenceInvokeEntitlementId` string: The minted inference.invoke entitlement (derived from the Edge id). Empty when inference is not in enabled_kinds.
    - `inferenceModelsReadEntitlementId` string: The minted inference.models.read entitlement (derived from the Edge id). Empty when inference is not in enabled_kinds.
    - `inferenceRoutes` C1ApiEdgeV1EdgeInferenceRoute[], nullable: Complete ordered set of tenant-unique inference routes. update_mask "inference_routes" atomically replaces the entire set (including empty). Up to 40 routes per Edge; replacing a set is atomic.
      - `allowHumanCallers` boolean: Explicitly authorize enabled human users holding per-capability app grants to exchange an SSO id_token with DPoP. False preserves workload-only routes.
      - `callerServicePrincipalId` string: Required in workload mode; forbidden when allow_human_callers is true. Workload callers must hold both inference capability grants.
      - `callerWorkloadFederationTrustId` string: The workload caller's exact federation trust; forbidden in human mode.
      - `contentType` string: The contentType field.
      - `expectedSecretVersion` string: Deprecated setup-time pin. New writes must leave it empty; the runtime resolves the active version of each target's Vault secret.
      - `followedTier` 'EDGE_INFERENCE_TIER_UNSPECIFIED' | 'EDGE_INFERENCE_TIER_FAST' | 'EDGE_INFERENCE_TIER_BALANCED' | 'EDGE_INFERENCE_TIER_BEST': C1 tier this route follows; UNSPECIFIED means it follows no tier. On write, a route that sets a tier must use the route_id c1-<tier>; the server replaces its targets and selection with the tier's current model, served through the providers this Edge already has credentials for, and also publishes that model's name as a second route. Clearing the tier (and publication) on a published route pins it to its current targets.
      - `nativeFormat` 'EDGE_INFERENCE_NATIVE_FORMAT_UNSPECIFIED' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_RESPONSES' | 'EDGE_INFERENCE_NATIVE_FORMAT_OPENAI_CHAT' | 'EDGE_INFERENCE_NATIVE_FORMAT_ANTHROPIC_MESSAGES': Accepted native client request format; never inferred from caller headers.
      - `publication` 'EDGE_INFERENCE_ROUTE_PUBLICATION_UNSPECIFIED' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_TIER' | 'EDGE_INFERENCE_ROUTE_PUBLICATION_MODEL_ALIAS': Which C1-published route of a followed tier this is. Set by the server; send back the value you read. UNSPECIFIED for a tenant-authored route.
      - `registryModelId` string: Registry model the route was built from; empty for a custom model.
      - `routeId` string: Tenant-owned route identifier, unique within the tenant. ListInferenceRoutes reports routes already configured for this application, not an allowlist.
      - `secretId` string: The secretId field.
      - `selection` C1ApiEdgeV1EdgeInferenceSelection: The EdgeInferenceSelection message.
        - `attemptTimeoutMs` integer: The attemptTimeoutMs field.
        - `confidenceThreshold` number: The confidenceThreshold field.
        - `handoffNotes` C1ApiEdgeV1EdgeInferenceHandoffNotes: The EdgeInferenceHandoffNotes message.
          - `deescalationNote` string: The deescalationNote field.
          - `escalationNote` string: The escalationNote field.
          - `onlyOnWrongSignalEscalation` boolean: The onlyOnWrongSignalEscalation field.
        - `maxAttempts` integer: The maxAttempts field.
        - `pickerMode` 'EDGE_INFERENCE_STAGE_PICKER_MODE_UNSPECIFIED' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_EFFICIENT_FIRST' | 'EDGE_INFERENCE_STAGE_PICKER_MODE_CAPABLE_FIRST': The pickerMode field.
        - `recentWindow` integer: The recentWindow field.
        - `retry` C1ApiEdgeV1EdgeInferenceRetry: Bounds the delay between provider attempts on one route. Only transient provider failures (rate limit, provider timeout, overload, a pre-response transport failure, a generic upstream error) ever wait; credential, policy, configuration and other 4xx rejections stay terminal.
          - `baseMs` integer: First backoff ceiling in milliseconds; doubles per consecutive transient failure in one provider traversal, up to the cap. Zero disables backoff.
          - `capMs` integer: Largest delay in milliseconds, including a clamped provider Retry-After.
          - `jitter` boolean: Draw each delay uniformly from zero to the ceiling instead of waiting the ceiling exactly.
          - `maxSameTargetRetries` integer: Extra attempts against the same target after a transient failure, before failing over. Each one spends one of the route's attempts.
        - `routeDeadlineMs` integer: The routeDeadlineMs field.
        - `stages` C1ApiEdgeV1EdgeInferenceStage[], nullable: The stages field.
          - `judge` C1ApiEdgeV1EdgeInferenceJudge: The EdgeInferenceJudge message.
            - `baseThreshold` number: The baseThreshold field.
            - `maxOutputTokens` integer: Maximum tokens available to classify a stage result (1 to 16,384).
            - `prompt` string: The prompt field.
            - `recentTurnWindow` integer: The recentTurnWindow field.
            - `thresholdStep` number: The thresholdStep field.
          - `judgeTargetId` string: The judgeTargetId field.
          - `stageId` string: The stageId field.
          - `targetIds` string[], nullable: The targetIds field.
          - `tierPrompt` string: The tierPrompt field.
        - `strategy` 'EDGE_INFERENCE_SELECTION_STRATEGY_UNSPECIFIED' | 'EDGE_INFERENCE_SELECTION_STRATEGY_SINGLE' | 'EDGE_INFERENCE_SELECTION_STRATEGY_FAILOVER' | 'EDGE_INFERENCE_SELECTION_STRATEGY_STAGE_ROUTER': The strategy field.
        - `targetIds` string[], nullable: The targetIds field.
      - `targets` C1ApiEdgeV1EdgeInferenceTarget[], nullable: Explicit upstream targets; no request may choose a target or destination.
        - `catalogEntryId` string: Catalog entry and variant to expand on write. Set both with target_id, upstream_model_id, region (AWS variants) and the secret reference; the server fills the provider profile, destination, credential source and recipe, content type, upstream path and model id grammar from the variant. Other provider fields must be unset or match the variant.
        - `catalogVariantId` string: The catalogVariantId field.
        - `circuitBreaker` C1ApiEdgeV1EdgeInferenceCircuitBreaker: The EdgeInferenceCircuitBreaker message.
          - `cooldownMs` integer: The cooldownMs field.
          - `failureThreshold` integer: The failureThreshold field.
        - `contentType` string: The contentType field.
        - `contextLength` integer: The contextLength field.
        - `credentialFailurePolicy` C1ApiEdgeV1EdgeInferenceCredentialFailurePolicy: The EdgeInferenceCredentialFailurePolicy message.
          - `notApplicable` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The notApplicable field.
          - `rejected401` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The rejected401 field.
          - `unavailableOrExpired` 'EDGE_INFERENCE_FAILURE_DISPOSITION_UNSPECIFIED' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_STOP' | 'EDGE_INFERENCE_FAILURE_DISPOSITION_NEXT_TARGET': The unavailableOrExpired field.
        - `credentialRecipe` string: The credentialRecipe field.
        - `credentialSource` 'EDGE_INFERENCE_CREDENTIAL_SOURCE_UNSPECIFIED' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_TENANT_VAULT' | 'EDGE_INFERENCE_CREDENTIAL_SOURCE_AWS_WORKLOAD_IDENTITY': The credentialSource field.
        - `destination` string: Empty only when a catalog variant expands it.
        - `expectedSecretVersion` string: Output-only: resolved active version in the distributed configuration.
        - `modelIdGrammar` string: The modelIdGrammar field.
        - `providerProfile` string: Empty only when catalog_entry_id and catalog_variant_id expand it; the expanded target is validated in full.
        - `reasoningEffort` string: The reasoningEffort field.
        - `region` string: The region field.
        - `secretId` string: The secretId field.
        - `targetId` string: The targetId field.
        - `upstreamModelId` string: The upstreamModelId field.
        - `upstreamPath` string: The upstreamPath field.
        - `vaultBoundaryId` string: The vaultBoundaryId field.
      - `upstreamModelId` string: Legacy singleton model, empty for graph routes.
      - `vaultBoundaryId` string: Legacy singleton Vault reference, empty for graph routes.
    - `mode` 'EDGE_MODE_UNSPECIFIED' | 'EDGE_MODE_DISABLED' | 'EDGE_MODE_OBSERVE' | 'EDGE_MODE_ENFORCE': Hosting state for the service configuration. DISABLED and UNSPECIFIED deny every request. ENFORCE and OBSERVE both still require capability authorization; content policy and routing remain configured on the Edge host. OBSERVE is currently identical to ENFORCE -- it exists so an operator can stage an Edge ahead of destination-level policy support, which does not exist yet.
    - `tokenAudience` string: The `audience` to send when exchanging a token for access to this Edge. Every Edge deployment in the tenant shares it, so it names the service; `token_resources` identify its service endpoints.
    - `tokenResources` C1ApiEdgeV1EdgeTokenResources: EdgeTokenResources names the resource URI for each supported Edge service. A field is empty when its capability is not in enabled_kinds.
      - `egress` string: Resource URI used with the egress.connect scope.
      - `inference` string: Resource URI used with the inference.models.read / inference.invoke scopes.
    - `tokenScopes` string[], nullable: The scopes this Edge can issue. Explicit requests fail if any scope is ungranted; an omitted scope requests the granted capabilities of each resource.
    - `updatedAt` string, date-time, nullable

## Changes

- **2026-10-20** `fe943bedf41b`: 1 warning, 23 info
  - added the new `EDGE_EGRESS_EFFECT_AUTHZEN` enum value to the `edge/oneOf[subschema #1: Edge]/egressRules/items/effect` response property for the response status `200`
  - added the new optional request property `edge/oneOf[subschema #1: Edge]/egressRules/items/allowEmptyEncodedBody`
  - added the new optional request property `edge/oneOf[subschema #1: Edge]/egressRules/items/allowResponseDecodeRefusals`
  - added the new optional request property `edge/oneOf[subschema #1: Edge]/egressRules/items/authzen`
  - …20 more
- **2026-10-06** `918a4e749f56`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/conductorone/apis/c1-api/changes/api/v1/apps/:app_id/edges/:id/post.md)

---

[API](https://skmtc.dev/conductorone/apis/c1-api.md) - [All operations](https://skmtc.dev/conductorone/apis/c1-api/llms.txt) - [OpenAPI document](https://skmtc.dev/conductorone/apis/c1-api/revisions/fe943bedf41b?raw)
