Recipe Schema
The canonical recipe schema is packages/recipes/schema/recipe.schema.json. This page documents every field.
Top-level fields
| Field | Type | Required | Description |
|---|
id | string | Yes | Unique recipe identifier. Convention: <slug>-v<N>. Must match ^[a-z0-9][a-z0-9\-]{2,60}$. |
version | integer | Yes | Version number, starting at 1. Immutable after first use. |
extends | string | Yes (custom) | Base preset to extend. Format: <preset-id>@<version> e.g. image-genai-v1@1. |
media_type | enum | Yes | image, audio, video, or text. |
description | string | Yes | Human-readable description. Max 256 chars. |
c2pa
| Field | Type | Required | Default | Description |
|---|
c2pa.enabled | boolean | Yes | — | Must be true for AI-generated content. |
c2pa.assertions | array | Yes | — | Assertion labels to include. See assertion types below. |
c2pa.require_ingredient_chain | boolean | No | false | If true, all edits must create new manifest nodes. |
Assertion types
| Assertion label | Description |
|---|
ai_generated | Content is fully AI-generated |
ai_assisted | Human creator with AI edits |
generator | Name of the generating system |
model | Model identifier |
prompt_hash | SHA-256 of the generation prompt |
created_at | ISO 8601 creation timestamp |
creator | Creator identity |
location_hint | Approximate location |
published | Publication record |
exif | EXIF metadata preservation |
legal_entity | Legal entity name |
legal_case_ref | Case reference string |
deepfake_disclosure | Required for deepfake content |
voiceclone_disclosure | Required for voice clone content |
watermark
| Field | Type | Required | Default | Description |
|---|
watermark.enabled | boolean | Yes | — | Whether to embed a watermark. |
watermark.engine | enum | Yes if enabled | — | trustmark, audioseal, videoseal, or synthid_text. Must be compatible with media_type. |
watermark.payload.type | enum | No | manifest_pointer | manifest_pointer (default). |
watermark.payload.encoding | enum | No | compact | compact (default). |
Engine compatibility
| Engine | Compatible media_type |
|---|
trustmark | image |
audioseal | audio |
videoseal | video |
synthid_text | text |
soft_binding
| Field | Type | Required | Default | Description |
|---|
soft_binding.enabled | boolean | Yes | — | Whether to write the fingerprint index. |
soft_binding.methods | array | Yes if enabled | — | Subset of ["exact_watermark", "exact_hash", "perceptual_hash"]. |
anchoring
| Field | Type | Required | Default | Description |
|---|
anchoring.enabled | boolean | Yes | — | Whether to queue manifest digests for anchoring. |
anchoring.methods | array | Yes if enabled | — | Subset of ["opentimestamps", "arbitrum"]. |
anchoring.batch_interval_minutes | integer | No | 60 | Batch interval in minutes. Minimum: 5. Standard: 60. |
kms_mode
| Value | Description |
|---|
kms | Default. Verbitas-managed KMS key. |
byok | Customer-provided KMS key. Requires Enterprise BYOK plan and registered key ARN. |
dev_local | Local software key. Non-production only. Rejected for t_live_ tenant IDs. |
retention
| Field | Type | Required | Default | Description |
|---|
retention.manifest_days | integer | Yes | — | Days to retain the manifest. Must be > 0. |
retention.original_asset_days | integer | No | 0 | Days to retain the original (pre-watermark) asset. 0 = do not store. |
retention.derived_asset_days | integer | No | 0 | Days to retain the signed (watermarked) asset. 0 = do not store. |
verification
| Field | Type | Required | Default | Description |
|---|
verification.minimum_confidence | float | No | 0.92 | Minimum confidence threshold for a positive verification state. Range: 0.0–1.0. |
verification.ocsp_mode | enum | No | default | default (degrades in dev) or required (never degrades). |
verification.ambiguous_match_behavior | enum | No | manual_review | manual_review, reject, or accept_partial. |
billing
| Field | Type | Required | Default | Description |
|---|
billing.meter | string | Yes | — | Meter to increment. Must be a valid meter kind (see Meter Kinds). |
billing.unit | string | Yes | asset | Billing unit. Currently only asset. |
ui
| Field | Type | Required | Default | Description |
|---|
ui.public_label | string | No | — | Label shown on the public verifier page for assets signed with this recipe. Max 120 chars. |
JSON Schema
The full schema is available at:
GET https://api.verbitas.io/v1/schemas/recipe
Or view it in the repository:
packages/recipes/schema/recipe.schema.json
Validation
Validate a recipe YAML locally:
# Install the validation tool
python -m verbitas.recipes.validate my-recipe-v1.yaml
OK: my-recipe-v1.yaml is valid.