---
title: "Create Workflow Play Revision Verification"
method: POST
path: "/api/plays/{play_id}/schedules/{schedule_id}/verifications"
tags: ["plays"]
---

# Create Workflow Play Revision Verification

`POST /api/plays/{play_id}/schedules/{schedule_id}/verifications`

## Request

- Base URL: `https://platform.verbiflow.com/api/bridge`
- URL: `https://platform.verbiflow.com/api/bridge/api/plays/{play_id}/schedules/{schedule_id}/verifications`
- 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

## Request body

- WorkflowPlayVerificationRequest: Verify an immutable draft against exact samples, budgets, and notification digests.
  - `assertions` WorkflowPlayVerificationAssertion[], required: Required preview assertions chosen from attempt_completed, run_completed, no_forbidden_effects, and outputs_present.
    - `kind` 'attempt_completed' | 'run_completed' | 'no_forbidden_effects' | 'outputs_present', required: Exact condition the preview receipt must prove.
  - `budgets` WorkflowPlayVerificationBudgets, required: Bounded resource and credit limits for one isolated verification execution.
    - `max_credit_units` integer, required: Maximum customer credit units the preview may consume.
    - `max_items` integer, required: Maximum items the preview execution may process.
    - `max_operations` integer, required: Maximum hosted SDK operations recorded by the preview.
    - `max_output_bytes` integer, required: Maximum total bytes the preview may publish as output.
    - `max_runtime_seconds` integer, required: Maximum wall-clock runtime for the hosted preview.
    - `max_source_rows` integer, required: Maximum total rows supplied across sample_refs.
  - `effect_ceiling` 'read_only', required: Verification permits read-only operations and never authorizes live external effects.
  - `expected_revision_id` string, required: Exact ready code revision returned by workflows.sync.
  - `expires_in_seconds` integer: How long the passed verification may authorize activation.
  - `idempotency_key` string, required: Stable retry key for this exact verification request.
  - `notification_document_digest` string, required: Exact document digest returned by notifications.preview_presentation.
  - `notification_renderer_digest` string, required: Exact renderer digest returned by notifications.preview_presentation.
  - `presentation_digest` string, required: SHA-256 digest of the reviewed Play presentation.
  - `sample_refs` WorkflowPlayVerificationSampleInput[], required: Bounded representative source samples. Each item has source_ref, key, and non-empty rows whose records contain that key.
    - `key` string, required: Row field whose non-empty value identifies every sample row.
    - `rows` object[], required: Revision-defined sample rows supplied only to the verification preview.
    - `source_ref` string, required: Stable caller-defined name for this sample input.

## Response `200`

Successful Response

- WorkflowPlayVerificationResponse: Envelope returned when creating or reading a schedule verification.
  - `verification` WorkflowPlayVerificationRecord, required: Verification request state and its immutable proof when terminal.
    - `budgets` 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.
    - `completed_at` string, nullable, required: ISO 8601 terminal time, or null while pending.
    - `created_at` string, nullable, required: ISO 8601 creation time when persisted.
    - `error` WorkflowPlayVerificationError, required: Sanitized executor failure attached to a terminal verification.
      - `code` string, nullable, required: Stable executor failure code when one was recorded.
      - `message` string, required: Sanitized failure message selected from executor evidence.
    - `expires_at` string, nullable, required: ISO 8601 proof expiry time, or null before terminalization.
    - `notification_document_digest` string, nullable, required: Digest of the canonical notification document actually rendered.
    - `notification_preview_receipt` WorkflowPlayNotificationPreviewReceipt, required: Known renderer receipt fields with lossless support for renderer additions.
      - `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.
              - …
          - `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.
              - …
            - NotificationPresentationUpdateOperationOutput: Replace the root or one earlier keyed thread message.
              - …
            - NotificationPresentationUploadOutputOperation: Attach one durable output to a root or thread reply.
              - …
            - NotificationPresentationReactOperation: Add one named Slack emoji reaction to a message.
              - …
            - NotificationPresentationUnreactOperation: Remove one named Slack emoji reaction from a message.
              - …
        - `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.
      - `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.
    - `notification_renderer_digest` string, nullable, required: Digest of the renderer contract actually used.
    - `notification_rule_digest` string, nullable, required: Digest of the notification rule prepared for activation.
    - `notification_rule_id` string, nullable, required: Deterministic rule id prepared for activation.
    - `notification_slack_payload_digest` string, nullable, required: Digest of the renderer-owned Slack payload.
    - `notification_slack_payload_fingerprint` string, nullable, required: Stable fingerprint of the rendered Slack payload.
    - `play_id` string, required: Play whose candidate revision is being verified.
    - `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.
    - `requested_notification_document_digest` string, nullable, required: Document digest supplied by the verification caller.
    - `requested_notification_renderer_digest` string, nullable, required: Renderer digest supplied by the verification caller.
    - `revision_id` string, required: Immutable candidate revision selected for verification.
    - `run_id` string, required: Progress-stream run id assigned to this verification.
    - `status` 'pending' | 'passed' | 'failed', required: Current verification lifecycle state.
    - `target_definition_digest` string, required: Digest of the candidate revision and target schedule definition.
    - `target_schedule_id` string, required: Schedule definition selected for verification.
    - `verification_id` string, required: Stable verification request id.

## 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)
