---
title: "Get Workflow Play Activation Review"
method: GET
path: "/api/plays/{play_id}/schedules/{schedule_id}/activation-review"
tags: ["plays"]
---

# Get Workflow Play Activation Review

`GET /api/plays/{play_id}/schedules/{schedule_id}/activation-review`

## Request

- Base URL: `https://platform.verbiflow.com/api/bridge`
- URL: `https://platform.verbiflow.com/api/bridge/api/plays/{play_id}/schedules/{schedule_id}/activation-review`
- Auth: one of:
  - HTTP bearer and API key in header `x-flage-org-id`
  - HTTP bearer and API key in header `x-flage-org-slug`

## Path parameters

- `play_id` string, required
- `schedule_id` string, required

## Query parameters

- `verification_id` string, required

## Response `200`

Successful Response

- WorkflowPlayActivationReviewResponse: Complete evidence and compare-and-swap inputs for revision activation.
  - `activation_blocking_reasons` string[], required: Stable failed preconditions; empty when activation_ready is true.
  - `activation_ready` boolean, required: True when every activation precondition currently passes.
  - `activation_request` WorkflowPlayActivationRequestLink: Ready-to-submit activation endpoint and its exact request body.
    - `body` WorkflowPlayActivationRequest, required: Compare-and-swap proof required to activate a verified revision.
      - `expected_active_revision_id` string, nullable: Active revision observed by the caller, or null before first activation.
      - `expected_authority_grant_version` integer, required: Authority fence observed during review.
      - `expected_draft_revision_id` string, required: Draft revision reviewed by the caller.
      - `expected_notification_document_digest` string, required: Digest of the reviewed notification Presentation.
      - `expected_notification_renderer_digest` string, required: Digest of the reviewed renderer contract.
      - `expected_schedule_updated_at` string, date-time, required: Schedule update time observed during review.
      - `expected_source_bindings_digest` string, required: Digest of the reviewed event-source bindings.
      - `expected_target_definition_digest` string, required: Digest of the reviewed schedule and draft definition.
      - `verification_id` string, required: Passed verification receipt authorizing this revision.
    - `href` string, required: Relative activation endpoint for the reviewed schedule.
    - `method` 'POST', required: HTTP method accepted by the activation endpoint.
  - `active_revision` WorkflowPlayRevisionSummary, required: Immutable code revision facts used to compare draft and active code.
    - `archive_sha256` string, nullable, required: SHA-256 of the immutable source archive when available.
    - `content_length` integer, required: Compressed archive size in bytes.
    - `created_at` string, nullable, required: ISO 8601 revision publication time.
    - `manifest` WorkflowPlayRevisionManifest, required: Known code-bundle envelope while preserving schema-version additions.
      - `archive_sha256` string, nullable: SHA-256 of the immutable source archive.
      - `entrypoint` string, nullable: Archive-relative executable entrypoint.
      - `file_count` integer, nullable: Number of files in the archive.
      - `paths` string[], nullable: Sorted archive-relative file paths.
      - `schema` 'verbiflow.workflow_play_code.v1' | 'verbiflow.workflow_play_code.v2' | 'verbiflow.workflow_play_code.v3', nullable: Code-bundle schema version; absent on the oldest retained revisions.
      - `sdk_version` string, nullable: Python SDK version locked into this revision.
      - `source_hash` string, nullable: Digest of the normalized source inputs.
      - `synced_at` string, nullable: ISO 8601 publication time.
      - `uncompressed_size_bytes` integer, nullable: Total uncompressed archive size.
      - `workflow_slug` string, nullable: Workflow slug attached during publication.
    - `revision_id` string, required: Immutable code revision id.
    - `source_hash` string, required: Digest of the normalized workflow source.
    - `status` 'ready' | 'deleted', required: Stored revision lifecycle state.
  - `assertions` WorkflowPlayVerificationAssertionRecord[], required: Assertions evaluated by verification.
    - `kind` 'attempt_completed' | 'run_completed' | 'no_forbidden_effects' | 'outputs_present', required: Condition evaluated against the preview evidence.
  - `credits` WorkflowPlayActivationCredits, required: Resource and side-effect limits proved by verification.
    - `budget` WorkflowPlayVerificationBudgetSnapshot, required: Resource ceilings persisted for one verification preview.
      - `max_credit_units` integer, required: Maximum customer credit units the preview may consume.
      - `max_items` integer, required: Maximum items the preview may process.
      - `max_operations` integer, required: Maximum recorded SDK operations.
      - `max_output_bytes` integer, required: Maximum bytes of published preview output.
      - `max_result_scan_rows` integer, nullable: Presentation-discovery scan ceiling added to newer persisted snapshots.
      - `max_runtime_seconds` integer, required: Maximum hosted preview runtime in seconds.
      - `max_source_rows` integer, required: Maximum total rows supplied as verification samples.
    - `effect_ceiling` WorkflowPlayReadOnlyEffectCeiling, required: Verification policy that permits reads and forbids mutations.
      - `kind` 'read_only', required: Forbids mutating SDK operations during verification.
  - `draft_revision` WorkflowPlayRevisionSummary, required: Immutable code revision facts used to compare draft and active code.
    - `archive_sha256` string, nullable, required: SHA-256 of the immutable source archive when available.
    - `content_length` integer, required: Compressed archive size in bytes.
    - `created_at` string, nullable, required: ISO 8601 revision publication time.
    - `manifest` WorkflowPlayRevisionManifest, required: Known code-bundle envelope while preserving schema-version additions.
      - `archive_sha256` string, nullable: SHA-256 of the immutable source archive.
      - `entrypoint` string, nullable: Archive-relative executable entrypoint.
      - `file_count` integer, nullable: Number of files in the archive.
      - `paths` string[], nullable: Sorted archive-relative file paths.
      - `schema` 'verbiflow.workflow_play_code.v1' | 'verbiflow.workflow_play_code.v2' | 'verbiflow.workflow_play_code.v3', nullable: Code-bundle schema version; absent on the oldest retained revisions.
      - `sdk_version` string, nullable: Python SDK version locked into this revision.
      - `source_hash` string, nullable: Digest of the normalized source inputs.
      - `synced_at` string, nullable: ISO 8601 publication time.
      - `uncompressed_size_bytes` integer, nullable: Total uncompressed archive size.
      - `workflow_slug` string, nullable: Workflow slug attached during publication.
    - `revision_id` string, required: Immutable code revision id.
    - `source_hash` string, required: Digest of the normalized workflow source.
    - `status` 'ready' | 'deleted', required: Stored revision lifecycle state.
  - `notification_previews` WorkflowPlayNotificationPreview[], required: Renderer previews that bind notification bytes and rule configuration.
    - `artifact` WorkflowPlayNotificationPreviewArtifact: Immutable PNG produced for a notification activation preview.
      - `artifact_id` string, required: Immutable preview image artifact id.
      - `media_type` 'image/png', required: Exact preview image media type.
      - `path` string, required: Artifact-relative PNG path.
      - `sha256` string, required: SHA-256 of the exact preview image bytes.
      - `size_bytes` integer, required: Preview image size in bytes.
    - `canonical_document` NotificationPresentationDocumentOutput: Canonical portable Presentation document accepted by the renderer.
      - `key` string, required: Portable stable identity within one Presentation document.
      - `root` NotificationPresentationMessageOutput, required: One root or thread message rendered by the notification transport.
        - `actions` NotificationPresentationOpenUrlAction[]: Optional ordered URL actions shown with the message.
          - `key` string, required: Portable stable identity within one Presentation document.
          - `kind` 'open_url', required: Selects an action that opens an HTTPS URL.
          - `label` string, required: Visible action label.
          - `url` string, required: Absolute HTTPS URL without user information.
        - `blocks` union[], required: Ordered typed content blocks rendered in this message.
          - union: One typed content block inside a Presentation message.
            - NotificationPresentationMarkdownBlock: Slack-compatible Markdown with an optional visible heading.
              - …
            - NotificationPresentationFieldsBlock: Compact label and value fields with an optional heading.
              - …
            - NotificationPresentationMetricsBlock: Prominent metrics with optional per-metric detail.
              - …
            - NotificationPresentationTableBlock: Compact table with ordered columns and aligned string cells.
              - …
            - NotificationPresentationLinksBlock: List of labeled HTTPS links with an optional heading.
              - …
            - NotificationPresentationImageBlock: Public HTTPS image with required accessible alternative text.
              - …
            - NotificationPresentationMentionsBlock: Slack mentions resolved from all delivery recipients or named audiences.
              - …
            - NotificationPresentationDividerBlock: Visual divider separating adjacent message content.
              - …
        - `key` string, required: Portable stable identity within one Presentation document.
        - `summary` string, nullable: Optional visible summary below the title.
        - `title` string, required: Visible message title.
      - `thread` union[]: Ordered post, update, upload, and reaction operations after the root.
        - union: One ordered thread operation whose target is the root or an earlier post key.
          - NotificationPresentationPostOperationOutput: Post one new keyed message into the root message thread.
            - `key` string, required: Portable stable identity within one Presentation document.
            - `kind` 'post', required: Selects a new thread-message operation.
            - `message` NotificationPresentationMessageOutput, required: One root or thread message rendered by the notification transport.
              - …
          - NotificationPresentationUpdateOperationOutput: Replace the root or one earlier keyed thread message.
            - `key` string, required: Portable stable identity within one Presentation document.
            - `kind` 'update', required: Selects a message replacement operation.
            - `message` NotificationPresentationMessageOutput, required: One root or thread message rendered by the notification transport.
              - …
            - `target` string, required: Root or earlier message key to update.
          - NotificationPresentationUploadOutputOperation: Attach one durable output to a root or thread reply.
            - `key` string, required: Portable stable identity within one Presentation document.
            - `kind` 'upload_output', required: Selects a durable-output upload operation.
            - `label` string, nullable: Optional visible label for the uploaded output.
            - `output_id` string, required: Durable output identifier to upload.
            - `placement` 'root' | 'reply', nullable: Optional explicit root-message or thread-reply upload placement.
            - `target` string, required: Root or earlier message key that owns the uploaded output.
          - NotificationPresentationReactOperation: Add one named Slack emoji reaction to a message.
            - `emoji` string, required: Slack emoji name without surrounding colons.
            - `key` string, required: Portable stable identity within one Presentation document.
            - `kind` 'react', required: Selects an add-reaction operation.
            - `target` string, required: Root or earlier message key to react to.
          - NotificationPresentationUnreactOperation: Remove one named Slack emoji reaction from a message.
            - `emoji` string, required: Slack emoji name without surrounding colons.
            - `key` string, required: Portable stable identity within one Presentation document.
            - `kind` 'unreact', required: Selects a remove-reaction operation.
            - `target` string, required: Root or earlier message key to remove the reaction from.
      - `version` '1': Portable Presentation document contract version.
    - `delivery_mode` union: Renderer-owned immediate or digest delivery mode.
      - WorkflowPlayPreviewInstantDelivery: Immediate delivery mode captured in a renderer preview receipt.
        - `kind` 'instant', required: Delivers every completed result immediately.
      - WorkflowPlayPreviewDigestDelivery: Digest delivery window captured in a renderer preview receipt.
        - `interval` 'hourly' | 'daily', required: Digest cadence used by the preview.
        - `kind` 'digest', required: Groups completed results into a digest window.
        - `timezone` string, required: IANA timezone used to label the digest window.
        - `windowEnd` string, required: Exclusive ISO 8601 end of the renderer-owned digest window.
        - `windowStart` string, required: Inclusive ISO 8601 start of the renderer-owned digest window.
    - `digest_context` WorkflowPlayPreviewDigestContext: Digest labels and recipients used by the notification renderer.
      - `recipientSlackUserIds` string[], required: Slack users represented by the digest partition.
      - `ruleName` string, required: Notification rule name shown in the digest preview.
      - `totalDocuments` integer, nullable: Total documents in the complete digest when known.
    - `document_digest` string, nullable: SHA-256 of the canonical Presentation document.
    - `idempotency_key` string, nullable: Renderer request idempotency key.
    - `mode` string, required: Renderer-owned preview delivery mode.
    - `notification_rule_binding` WorkflowPlayNotificationRuleBinding: Exact Slack notification rule that activation will install.
      - `destination` SlackChannelDestination, required: One Slack channel selected as a notification destination.
        - `channel_id` string, required: Slack channel id that receives the notification.
        - `kind` 'slack_channel', required: Selects Slack channel delivery.
        - `team_id` string, required: Slack workspace id containing the destination channel.
      - `rule_digest` string, required: SHA-256 of the exact rule configuration.
      - `rule_id` string, required: Deterministic notification rule id installed at activation.
      - `slack_app_id` string, required: Slack app identity used to deliver the notification.
    - `preview_render_fingerprint` string, nullable: Fingerprint of the exact rendered preview.
    - `receipt_id` string, nullable: Immutable renderer receipt id.
    - `recipient_context` WorkflowPlayPreviewRecipientContext: Resolved Slack recipients used by the notification renderer.
      - `slackUserIds` string[], required: Exact Slack users resolved for the preview.
      - `slackUserIdsByAudience` object, required: Presentation audience keys mapped to Slack users.
      - `slackUserLabelsById` object, nullable: Slack user ids mapped to rendered labels when present.
    - `renderer_digest` string, nullable: Digest of the renderer contract used for this preview.
    - `renderer_identity_digest` string, nullable: Digest of the renderer implementation identity.
    - `renderer_platform` string, nullable: Platform selected by the renderer.
    - `slack_payload` object, nullable: Exact renderer-owned Slack payload.
    - `slack_payload_digest` string, nullable: SHA-256 of the canonical Slack payload.
    - `slack_payload_fingerprint` string, nullable: Fingerprint used to detect payload drift.
    - `snapshot_digest` string, nullable: Digest binding the preview to its renderer inputs.
    - `topology` NotificationPreviewTopology: Counts of message operations in a rendered notification preview.
      - `posts` integer, required: Number of new thread messages rendered.
      - `reactions` integer, required: Number of add-reaction and remove-reaction operations rendered.
      - `root_messages` integer, required: Number of root messages rendered.
      - `thread_operations` integer, required: Total ordered operations rendered after the root message.
      - `updates` integer, required: Number of message replacements rendered.
      - `uploads` integer, required: Number of durable output uploads rendered.
  - `operations` WorkflowPlayVerificationOperationEvidence[], required: Hosted SDK operations observed during verification.
    - `attempts` integer, required: Number of claims or dispatch attempts recorded for this operation.
    - `effect_class` 'read' | 'internal_mutation' | 'provider_idempotent' | 'provider_non_idempotent', required: Boundary effect class assigned by the hosted SDK policy.
    - `error_code` string, nullable, required: Stable sanitized failure code, or null when none was recorded.
    - `invocation_id` string, required: Caller-provided idempotency identity within the hosted attempt.
    - `method` 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', required: HTTP method recorded for the SDK operation.
    - `retry_contract` 'replay_only' | 'retry_safe' | 'reconcile_before_retry' | 'never_retry', required: Retry rule recorded before the operation was dispatched.
    - `route_identity` string, required: Stable route template used for policy and replay decisions.
    - `state` 'claimed' | 'running' | 'succeeded' | 'failed' | 'cancel_requested' | 'cancelled' | 'unknown', required: Durable terminal or in-flight SDK operation state observed by verification.
  - `play_id` string, required: Play whose draft revision is under review.
  - `receipt` WorkflowPlayVerificationReceipt, required: Immutable terminal verification proof produced by the shared verification contract.
    - `admitted_operations_digest` string, required: Digest of the recorded hosted SDK operations.
    - `archive_sha256` string, required: SHA-256 of the exact source archive executed.
    - `assertions_digest` string, required: Digest of the exact verification assertions evaluated.
    - `budgets_digest` string, required: Digest of the persisted resource ceilings.
    - `completed_at` string, required: ISO 8601 time when verification terminalized.
    - `created_at` string, required: ISO 8601 time when verification began.
    - `effect_ceiling_digest` string, required: Digest of the effect ceiling enforced by the preview.
    - `execution_mode` 'preview', required: Confirms that the run used the non-production preview execution mode.
    - `expires_at` string, required: ISO 8601 deadline after which this proof cannot authorize activation.
    - `failure_reasons` string[], required: Stable reasons explaining a failed verification; empty when passed.
    - `hosted_attempt_run_id` string, nullable, required: Hosted executor attempt id when an attempt was started.
    - `hosted_runtime_version` string, required: Hosted workflow runtime version used by the preview.
    - `hosted_sdk_policy_version` integer, required: Hosted SDK policy version enforced during the preview.
    - `notification_digest` string, required: Digest of the schedule notification configuration verified by this run.
    - `notification_document_digest` string, nullable, required: Digest of the canonical rendered notification document.
    - `notification_renderer_digest` string, nullable, required: Digest of the renderer contract that produced the preview.
    - `organization_id` string, required: Organization that owns the verification proof.
    - `outputs_digest` string, nullable, required: Digest of published preview outputs, or null when no output was produced.
    - `play_id` string, required: Play whose candidate revision was verified.
    - `presentation_digest` string, required: Digest of the Presentation expected from the candidate revision.
    - `preview_tick_id` string, required: Verification-preview tick admitted for this proof.
    - `receipt_digest` string, required: SHA-256 binding every immutable field in this receipt.
    - `revision_id` string, required: Immutable candidate revision executed by the preview.
    - `sample_digest` string, required: Digest of the exact sample inputs supplied to the preview.
    - `source_hash` string, required: Digest of the normalized source for revision_id.
    - `status` 'passed' | 'failed', required: Terminal verification result.
    - `target_definition_digest` string, required: Digest binding the verified revision, schedule, and execution definition.
    - `target_schedule_id` string, required: Schedule definition against which the revision was verified.
    - `verification_id` string, required: Verification request proved by this receipt.
    - `version` 1, required: Verification receipt contract version.
    - `workflow_play_run_id` string, required: Durable Workflow Play run created for the preview.
    - `workflow_progress_run_id` string, required: Progress-stream run id for the preview execution.
  - `sample_refs` WorkflowPlayVerificationSample[], required: Exact sample inputs used by verification.
    - `key` string, required: Row field used as the sample identity.
    - `rows` object[], required: Exact revision-defined sample rows used by the preview.
    - `source_ref` string, required: Stable caller-defined name for this sample input.
  - `schedule` WorkflowPlayActivationSchedule, required: Schedule and notification context reviewed before activation.
    - `delivery_target` WorkflowPlayScheduleDeliveryTarget, required: Slack destination snapshotted into a schedule and each admitted tick.
      - `app_id` string, nullable: Slack app id resolved when the destination was validated.
      - `channel_id` string, required: Slack channel id that receives completion notifications.
      - `installation_id` string, nullable: Workspace installation id resolved when the destination was validated.
      - `kind` 'slack_channel', required: Selects Slack channel delivery.
      - `team_id` string, required: Slack workspace id containing the destination channel.
    - `recipient_fallback` union, required: Recursive JSON value: object, array, string, integer, number, boolean, or null.
      - object
      - CampaignJsonValueOutput[]
      - string
      - integer
      - number
      - boolean
    - `schedule_slug` string, required: Stable human-readable schedule name.
    - `schedule_spec` union, required: Timing rule for a Play schedule. Interval schedules repeat after a duration; calendar schedules run at a local wall-clock time; once schedules run once; manual schedules run only through run-now or admitted events.
      - union
        - object
          - `cadence_seconds` integer, required: Seconds between occurrences. This is the canonical interval field.
          - `interval_seconds` integer: Legacy alias for cadence_seconds retained for existing schedules.
          - `type` 'interval': Selects duration-based recurrence.
        - object
          - `cadence_seconds` integer: Seconds between occurrences. This is the canonical interval field.
          - `interval_seconds` integer, required: Legacy alias for cadence_seconds retained for existing schedules.
          - `type` 'interval': Selects duration-based recurrence.
      - object
        - `at` string, date-time: Timezone-aware occurrence time. next_run_at may supply it instead.
        - `type` 'once', required: Selects a single occurrence.
      - object
        - `type` 'manual', required: Disables time-driven occurrences while allowing manual and event admission.
    - `timezone` string, nullable, required: IANA timezone derived from the timing rule, or null for non-calendar schedules.
  - `schedule_id` string, required: Schedule that will adopt the draft revision.
  - `semantic_diff` WorkflowPlayRevisionDifference[], required: Meaningful changes from the active revision to the draft revision.
    - `after` union, required: Recursive JSON value: object, array, string, integer, number, boolean, or null.
      - object
      - CampaignJsonValueOutput[]
      - string
      - integer
      - number
      - boolean
    - `before` union, required: Recursive JSON value: object, array, string, integer, number, boolean, or null.
      - object
      - CampaignJsonValueOutput[]
      - string
      - integer
      - number
      - boolean
    - `field` string, required: Revision or manifest field whose value changed.
  - `source_bindings` WorkflowPlayActivationSourceBinding[], required: Enabled provider-event bindings that activation will pin to the draft revision.
    - `adapter_type` 'hubspot_webhook_v3', required: Ingress adapter contract version.
    - `binding_id` string, required: Stable trigger-binding id included in the activation digest.
    - `config` WorkflowPlayHubSpotTriggerConfig, required: HubSpot webhook event filters pinned to one source binding.
      - `event_types` string[], required: HubSpot subscription types admitted by this binding.
      - `property_names` string[], required: HubSpot property names admitted for property-change subscriptions.
    - `config_digest` string, required: SHA-256 of the canonical binding configuration.
    - `provider_account_id` string, required: Connected HubSpot account whose events may be admitted.
    - `source` 'webhook.hubspot', required: Provider event namespace.
    - `version` integer, required: Optimistic-concurrency version of the binding.
  - `source_bindings_digest` string, required: SHA-256 of the ordered enabled source bindings.
  - `verification_id` string, required: Verification proof evaluated for activation.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract.md) - [All operations](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract/llms.txt) - [OpenAPI document](https://skmtc.dev/verbiflow/apis/verbiflow-sdk-http-contract/revisions/c80e903ef8f3?raw)
