Skip to content

Recipe Schema

Recipe Schema

The canonical recipe schema is packages/recipes/schema/recipe.schema.json. This page documents every field.

Top-level fields

FieldTypeRequiredDescription
idstringYesUnique recipe identifier. Convention: <slug>-v<N>. Must match ^[a-z0-9][a-z0-9\-]{2,60}$.
versionintegerYesVersion number, starting at 1. Immutable after first use.
extendsstringYes (custom)Base preset to extend. Format: <preset-id>@<version> e.g. image-genai-v1@1.
media_typeenumYesimage, audio, video, or text.
descriptionstringYesHuman-readable description. Max 256 chars.

c2pa

FieldTypeRequiredDefaultDescription
c2pa.enabledbooleanYesMust be true for AI-generated content.
c2pa.assertionsarrayYesAssertion labels to include. See assertion types below.
c2pa.require_ingredient_chainbooleanNofalseIf true, all edits must create new manifest nodes.

Assertion types

Assertion labelDescription
ai_generatedContent is fully AI-generated
ai_assistedHuman creator with AI edits
generatorName of the generating system
modelModel identifier
prompt_hashSHA-256 of the generation prompt
created_atISO 8601 creation timestamp
creatorCreator identity
location_hintApproximate location
publishedPublication record
exifEXIF metadata preservation
legal_entityLegal entity name
legal_case_refCase reference string
deepfake_disclosureRequired for deepfake content
voiceclone_disclosureRequired for voice clone content

watermark

FieldTypeRequiredDefaultDescription
watermark.enabledbooleanYesWhether to embed a watermark.
watermark.engineenumYes if enabledtrustmark, audioseal, videoseal, or synthid_text. Must be compatible with media_type.
watermark.payload.typeenumNomanifest_pointermanifest_pointer (default).
watermark.payload.encodingenumNocompactcompact (default).

Engine compatibility

EngineCompatible media_type
trustmarkimage
audiosealaudio
videosealvideo
synthid_texttext

soft_binding

FieldTypeRequiredDefaultDescription
soft_binding.enabledbooleanYesWhether to write the fingerprint index.
soft_binding.methodsarrayYes if enabledSubset of ["exact_watermark", "exact_hash", "perceptual_hash"].

anchoring

FieldTypeRequiredDefaultDescription
anchoring.enabledbooleanYesWhether to queue manifest digests for anchoring.
anchoring.methodsarrayYes if enabledSubset of ["opentimestamps", "arbitrum"].
anchoring.batch_interval_minutesintegerNo60Batch interval in minutes. Minimum: 5. Standard: 60.

kms_mode

ValueDescription
kmsDefault. Verbitas-managed KMS key.
byokCustomer-provided KMS key. Requires Enterprise BYOK plan and registered key ARN.
dev_localLocal software key. Non-production only. Rejected for t_live_ tenant IDs.

retention

FieldTypeRequiredDefaultDescription
retention.manifest_daysintegerYesDays to retain the manifest. Must be > 0.
retention.original_asset_daysintegerNo0Days to retain the original (pre-watermark) asset. 0 = do not store.
retention.derived_asset_daysintegerNo0Days to retain the signed (watermarked) asset. 0 = do not store.

verification

FieldTypeRequiredDefaultDescription
verification.minimum_confidencefloatNo0.92Minimum confidence threshold for a positive verification state. Range: 0.0–1.0.
verification.ocsp_modeenumNodefaultdefault (degrades in dev) or required (never degrades).
verification.ambiguous_match_behaviorenumNomanual_reviewmanual_review, reject, or accept_partial.

billing

FieldTypeRequiredDefaultDescription
billing.meterstringYesMeter to increment. Must be a valid meter kind (see Meter Kinds).
billing.unitstringYesassetBilling unit. Currently only asset.

ui

FieldTypeRequiredDefaultDescription
ui.public_labelstringNoLabel 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:

Terminal window
# Install the validation tool
pip install verbitas
# Validate
python -m verbitas.recipes.validate my-recipe-v1.yaml
OK: my-recipe-v1.yaml is valid.