{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"description":"Text prompt describing the edit to apply to the input video","type":"string","minLength":1,"maxLength":1000},"video_uri":{"description":"HTTPS URL, Runway URI, or data URI of the source video to edit (≤30 seconds)","type":"string"},"keyframes":{"description":"Timed guidance images placed at specific points in the input video. Each entry has a uri and either seconds (absolute timestamp) or at (fractional position). Up to 5.","minItems":1,"maxItems":5,"type":"array","items":{"anyOf":[{"type":"object","properties":{"uri":{"description":"HTTPS URL, Runway URI, or data URI of the guidance image","type":"string"},"seconds":{"description":"Absolute timestamp in seconds from the start of the input video","type":"number","minimum":0,"maximum":30}},"required":["uri","seconds"],"additionalProperties":false},{"type":"object","properties":{"uri":{"description":"HTTPS URL, Runway URI, or data URI of the guidance image","type":"string"},"at":{"description":"Position as a fraction [0.0, 1.0] of the input video duration","type":"number","minimum":0,"maximum":1}},"required":["uri","at"],"additionalProperties":false}]}},"prompt_images":{"description":"Image keyframes for guiding the edit at specific points in the output video. Up to 5.","minItems":1,"maxItems":5,"type":"array","items":{"type":"object","properties":{"uri":{"description":"HTTPS URL, Runway URI, or data URI of the keyframe image","type":"string"},"position":{"description":"Where in the output video this image applies: \"first\", \"last\", { type: \"timestamp\", timestampSeconds }, or { type: \"position\", positionPercentage }","anyOf":[{"type":"string","enum":["first","last"]},{"type":"object","properties":{"type":{"type":"string","const":"timestamp"},"timestampSeconds":{"description":"Absolute timestamp in seconds from the start of the output video","type":"number","minimum":0}},"required":["type","timestampSeconds"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"position"},"positionPercentage":{"description":"Position as a fraction [0.0, 1.0] of the total video duration","type":"number","minimum":0,"maximum":1}},"required":["type","positionPercentage"],"additionalProperties":false}]}},"required":["uri","position"],"additionalProperties":false}},"seed":{"description":"Random seed for reproducible results","type":"integer","minimum":0,"maximum":4294967295},"content_moderation":{"description":"Settings that affect the behavior of the content moderation system","type":"object","properties":{"public_figure_threshold":{"description":"When set to \"low\", content moderation is less strict about recognizable public figures","type":"string","enum":["auto","low"]}},"additionalProperties":false},"duration":{"description":"Duration of the source video in seconds. Used for billing only — not sent to RunwayML. Provide this so the gateway can compute per-second video cost accurately.","type":"number","exclusiveMinimum":0}},"required":["prompt","video_uri"],"additionalProperties":false}