addrbookFor publishers
← The evidence ledger

Evidence row 1017124

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 583db1aa-1040-4964-bf60-16bcc3b0f3a9
Recorded
Previous row
#770583
Body SHA-256
c52f210cbb688aecc81ad2c5b97c05de0fe4c9681f4e2fd69732ed953ebbd93b
Leaf
0xf42331fd47db817fa0c94f7a11fdf62d91ebb053cec6244fdff3f79c156c1833

What was observed

{
  "count": 59,
  "tools": [
    {
      "description": "Add an episode to a season, numbered after the last one, as a draft with no video. Title, synopsis, runtime and a buy/rent price for this episode alone are optional. Up to 200 per season. Then start_film_upload with asset: episode and the returned episode id for its video, and publish_episode once the video is ready and the season is published.",
      "inputSchema": {
        "properties": {
          "buy_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buy price for this episode in US cents (minimum 100); null removes it. Only sells once the episode is published."
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "rent_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rental price for this episode in US cents (minimum 100); null removes it."
          },
          "rental_window_hours": {
            "description": "How long an episode rental lasts, in hours.",
            "maximum": 720,
            "minimum": 1,
            "type": "integer"
          },
          "runtime_minutes": {
            "anyOf": [
              {
                "maximum": 6000,
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Runtime in minutes; null clears it."
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "synopsis": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The episode's synopsis; null clears it."
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The episode's title (up to 200 characters); null clears it, leaving \"Episode N\"."
          }
        },
        "required": [
          "film_id",
          "season_id"
        ],
        "type": "object"
      },
      "name": "add_episode"
    },
    {
      "description": "Add a credit (role + name) to a film's credit list, optionally linking it to a Vidreno filmmaker by username (they get a request to accept) or inviting the person by email (the invite is sent straight away; at most 60 credits per film, invites are rate-limited per day). Returns the full credit list with credit_ids.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "Invite the person by email instead: the credit is stored and an invite email is sent now.",
            "format": "email",
            "maxLength": 254,
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "name": {
            "description": "The person's name as it should appear.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "position": {
            "description": "1-based position in the credit list; default last.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "role": {
            "description": "The role, e.g. Director, Editor, Lead actor.",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          },
          "username": {
            "description": "Link the credit to an existing Vidreno filmmaker account by username (they are asked to accept).",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "role",
          "name"
        ],
        "type": "object"
      },
      "name": "add_film_credit"
    },
    {
      "description": "Add a role the project is looking for (the Studio's Roles tab): the role name, how many people, what it involves and the pay (paid with an amount, currency and per day / flat / per hour; expenses only; unpaid; deferred / profit share). Up to 20 roles per project. Returns the project with its roles and their ids.",
      "inputSchema": {
        "properties": {
          "count_needed": {
            "default": 1,
            "description": "How many people are needed for this role; default 1.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 600,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the role involves; null clears it."
          },
          "pay_amount_cents": {
            "anyOf": [
              {
                "maximum": 100000000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only."
          },
          "pay_currency": {
            "anyOf": [
              {
                "enum": [
                  "USD",
                  "EUR",
                  "GBP",
                  "CAD",
                  "AUD",
                  "NZD",
                  "CHF",
                  "SEK",
                  "NOK",
                  "DKK",
                  "PLN",
                  "CZK",
                  "HUF",
                  "JPY",
                  "KRW",
                  "INR",
                  "BRL",
                  "MXN",
                  "ZAR",
                  "SGD",
                  "HKD",
                  "AED",
                  "ILS",
                  "TRY",
                  "NGN",
                  "KES",
                  "PHP",
                  "IDR",
                  "THB",
                  "ARS"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ISO currency code for a paid role, e.g. USD, EUR, GBP."
          },
          "pay_type": {
            "description": "paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share).",
            "enum": [
              "paid",
              "expenses",
              "unpaid",
              "deferred"
            ],
            "type": "string"
          },
          "pay_unit": {
            "anyOf": [
              {
                "enum": [
                  "day",
                  "flat",
                  "hour"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the amount covers for a paid role: day, flat or hour."
          },
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "role": {
            "description": "The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it).",
            "maxLength": 40,
            "type": "string"
          }
        },
        "required": [
          "project_id",
          "role",
          "pay_type"
        ],
        "type": "object"
      },
      "name": "add_project_role"
    },
    {
      "description": "Add a season to a series (a film created with kind: series), numbered after the last one, as a draft. Title and synopsis are optional (\"Season N\" otherwise); a buy/rent price here sells the whole season once it is published with a playable episode. Up to 50 seasons. The age rating and content descriptors belong to the whole series (create_film / update_film), not to a season or episode. Returns the film (with every season) and the new season's id for add_episode.",
      "inputSchema": {
        "properties": {
          "buy_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buy price for the whole season in US cents (minimum 100); null removes it. Only sells once the season is published with a playable episode."
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "rent_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rental price for the whole season in US cents (minimum 100); null removes it."
          },
          "rental_window_hours": {
            "description": "How long a season rental lasts, in hours.",
            "maximum": 720,
            "minimum": 1,
            "type": "integer"
          },
          "synopsis": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The season's synopsis; null clears it."
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The season's title (up to 200 characters); null clears it, leaving \"Season N\"."
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "add_season"
    },
    {
      "description": "Apply to an open role as the user, with their filmmaker profile as the application (the owner sees the public profile card), an optional note and up to 3 links. The apply form's rules apply unchanged: a creator account with a public filmmaker profile, display name and at least one role; one application per role; not the user's own project; up to 20 applications a day. The owner is e-mailed.",
      "inputSchema": {
        "properties": {
          "links": {
            "description": "Up to 3 https links (reel, portfolio).",
            "items": {
              "maxLength": 500,
              "type": "string"
            },
            "maxItems": 3,
            "type": "array"
          },
          "note": {
            "description": "A note to the owner (up to 600 characters): why the user fits the role.",
            "maxLength": 600,
            "type": "string"
          },
          "role_id": {
            "description": "The role's id (from get_project or search_open_roles).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "role_id"
        ],
        "type": "object"
      },
      "name": "apply_to_role"
    },
    {
      "description": "Close a live project: its page stays readable with a \"no longer looking for people\" notice, it leaves Projects, Jobs and the sitemaps, every open role closes and pending applicants are told by e-mail. Always confirm with the user first (name the project) and only then call with confirm set to true.",
      "inputSchema": {
        "properties": {
          "confirm": {
            "description": "Must be true. Ask the user to confirm before calling: the project leaves Projects and Jobs, every open role closes and pending applicants are told; those applications stay closed even if publish_project relists the project later.",
            "type": "boolean"
          },
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "project_id",
          "confirm"
        ],
        "type": "object"
      },
      "name": "close_project"
    },
    {
      "description": "Turn a film's plain director and cast text lines into credit rows (Director for the director line, Actor for each comma-separated cast name), appended after the existing credits, and clear the lines — the film editor's convert button. Nothing is linked or invited; use update_film_credit afterwards. Returns the full credit list.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "convert_legacy_credits"
    },
    {
      "description": "Create a new draft film from a title (optionally with its age_rating and content_descriptors), exactly as the Studio's add-film dialog does. The draft starts as Buy or rent with no prices, no poster and no files, and is not public until publish_film. Returns the film's id, editor link and publish checklist (the same shape as get_film), so the next steps are update_film (details, access: free or paid, prices), start_film_upload (main film), the poster in the film editor, then publish_film.",
      "inputSchema": {
        "properties": {
          "age_rating": {
            "description": "Age rating of the whole title (a series' rating covers every episode): all = All ages, 13 = 13+, 16 = 16+, 18 = 18+. An 18+ title asks viewers to confirm they're 18 or over before it plays. Sexual content or nudity makes a film 18+. Optional here (set it later with update_film); publishing needs one.",
            "enum": [
              "13",
              "16",
              "18",
              "all"
            ],
            "type": "string"
          },
          "content_descriptors": {
            "description": "Content descriptors shown on the film page: sexual-content = Sexual content, nudity = Nudity, violence = Violence, strong-language = Strong language, drug-use = Drug use, disturbing = Horror / disturbing scenes. The list is replaced as a whole; an empty list clears it. Sexual content or nudity makes a film 18+. (age_rating must be 18 — the call is refused otherwise).",
            "items": {
              "enum": [
                "sexual-content",
                "nudity",
                "violence",
                "strong-language",
                "drug-use",
                "disturbing"
              ],
              "type": "string"
            },
            "maxItems": 6,
            "type": "array"
          },
          "kind": {
            "default": "feature",
            "description": "feature (default) = a single film with one main video; series = seasons of episodes, each with its own video, built with add_season and add_episode. A title's kind is set here and not changed through this connection.",
            "enum": [
              "feature",
              "series"
            ],
            "type": "string"
          },
          "title": {
            "description": "The film's title (up to 200 characters); everything else is set afterwards.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "type": "object"
      },
      "name": "create_film"
    },
    {
      "description": "Create a new draft project exactly as the Studio's New project does: a title (optional) and whether it is public or private (invite only). The draft is not listed until publish_project. Refused with the Studio's own message when the user's filmmaker profile is not ready (a creator account with a public filmmaker profile, display name and at least one role) or the user already has the maximum number of live projects. Returns the project (same shape as get_project): next are update_project for the details, add_project_role for each role, then publish_project.",
      "inputSchema": {
        "properties": {
          "title": {
            "description": "The project's working title (up to 120 characters); \"Untitled project\" until set.",
            "maxLength": 120,
            "type": "string"
          },
          "visibility": {
            "default": "public",
            "description": "public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio).",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "create_project"
    },
    {
      "description": "Permanently delete a hosted video and its file. Irreversible: always confirm with the user first (name the video) and only then call with confirm set to true.",
      "inputSchema": {
        "properties": {
          "confirm": {
            "description": "Must be true. Ask the user to confirm before calling; deletion is permanent and removes the file from Vidreno's storage.",
            "type": "boolean"
          },
          "video_id": {
            "description": "The video's public id (from list_videos / get_video).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "video_id",
          "confirm"
        ],
        "type": "object"
      },
      "name": "delete_video"
    },
    {
      "description": "The connected creator's account overview: which product it is set up for (creator_mode: On Demand for films, or Video Hosting for hosted videos; a preference that shapes what to suggest first, not a restriction on the tools), plan, hosted-video storage used versus the plan limit, how many hosted videos and films they have, and their public filmmaker profile link when the profile is public.",
      "inputSchema": {
        "description": "No arguments.",
        "properties": {},
        "type": "object"
      },
      "name": "get_account"
    },
    {
      "description": "How the user's videos are doing: totals (videos, views, storage), the most viewed videos, the newest uploads and a daily views series for the last N days.",
      "inputSchema": {
        "properties": {
          "days": {
            "default": 30,
            "description": "Length of the daily views window in days (default 30).",
            "maximum": 365,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "get_analytics"
    },
    {
      "description": "What the user's Payouts page shows, read-only: lifetime and this month's earnings split into film sales and ad earnings, the balance (available to cash out, maturing inside the hold window, paid out, in flight), the payout minimum and hold period, the saved payout method in masked form, whether ad earnings are live for this account or still coming soon (with the current ad terms: what advertisers pay per 1,000 views and the share the user keeps after payment-processing fees), a per-film breakdown (sales, refunds, gross, net earnings) and the 5 most recent payouts. Amounts are in cents with a display string. Read-only: to cash out or change the payout method the user opens https://vidreno.com/payouts. Use list_payouts for the full payout history and list_film_sales for individual orders.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_earnings"
    },
    {
      "description": "Build the HTML embed snippet for a video with the chosen player options (autoplay, muted, loop, controls, corner radius, fullscreen, responsive or fixed size). The snippet keeps the video's own aspect ratio (16:9 when its size is unknown). Also returns the bare iframe URL, the player and share links, and the direct HLS stream link (hls_url, for third-party players and channel tools that take a .m3u8 rather than an iframe) when available, else hls_status and hls_reason explaining what is missing. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.",
      "inputSchema": {
        "properties": {
          "alignment": {
            "default": "center",
            "description": "Horizontal alignment inside the host page.",
            "enum": [
              "left",
              "center",
              "right"
            ],
            "type": "string"
          },
          "allow_fullscreen": {
            "default": true,
            "description": "Allow the fullscreen button.",
            "type": "boolean"
          },
          "autoplay": {
            "default": false,
            "description": "Start playing on load (browsers require muted for this to work).",
            "type": "boolean"
          },
          "controls": {
            "default": true,
            "description": "Show the player controls.",
            "type": "boolean"
          },
          "corner_radius": {
            "default": 10,
            "description": "Corner radius in pixels; 0 for square corners.",
            "maximum": 64,
            "minimum": 0,
            "type": "integer"
          },
          "height": {
            "description": "Fixed height in pixels (only when responsive is false). Omit it to get the width at the video's own aspect ratio (315 for 560 at 16:9).",
            "maximum": 4096,
            "minimum": 1,
            "type": "integer"
          },
          "loop": {
            "default": false,
            "description": "Restart when finished.",
            "type": "boolean"
          },
          "muted": {
            "default": false,
            "description": "Start muted.",
            "type": "boolean"
          },
          "responsive": {
            "default": true,
            "description": "True for a fluid embed that fills its container at the video's own aspect ratio; false for a fixed pixel size.",
            "type": "boolean"
          },
          "video_id": {
            "description": "The video's public id (from list_videos / get_video).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "width": {
            "default": 560,
            "description": "Fixed width in pixels (only when responsive is false).",
            "maximum": 4096,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "video_id"
        ],
        "type": "object"
      },
      "name": "get_embed_code"
    },
    {
      "description": "Full details of one film: status (draft/published), how it is released (free to watch or buy/rent) and its prices, play count, metadata, main film and trailer state, credits (with credit_ids), the publish checklist and its public page link. Films cannot be embedded.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "get_film"
    },
    {
      "description": "The user's filmmaker profile as the Profile page shows it: username (the public handle) and why it cannot go public yet, display name, bio, location, roles, website and social links, whether the profile is public and its public link, plus how many credits from other filmmakers await an answer. The avatar is managed in the Profile page.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_filmmaker_profile"
    },
    {
      "description": "Identify the Vidreno account this connection belongs to. Call this when the user asks which account is connected.",
      "inputSchema": {
        "description": "No arguments.",
        "properties": {},
        "type": "object"
      },
      "name": "get_profile"
    },
    {
      "description": "Full details of one of the user's own projects, as the Studio editor shows them: every field, the roles with pay and their application counts, the publish checklist with the tool that completes each open item, whether it can be published, previous work and the films that could be listed as previous work, and the public and Studio links. Only the owner can read a project this way; anyone else's answers not found.",
      "inputSchema": {
        "properties": {
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "name": "get_project"
    },
    {
      "description": "Check an upload started with start_video_upload, upload_video_from_chat or start_film_upload: awaiting_file (includes the upload_url while it can still be used), uploading, ready (a hosted video comes with its details and a default embed code; a film file with the film and slot it was attached to), expired (start a new upload), or failed (chat imports only; includes failure_reason).",
      "inputSchema": {
        "properties": {
          "upload_id": {
            "description": "The upload_id returned by start_video_upload or upload_video_from_chat.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "upload_id"
        ],
        "type": "object"
      },
      "name": "get_upload_status"
    },
    {
      "description": "Full details of one hosted video: title, description, visibility, size, duration, views, player colour, category and its links, plus the direct HLS stream link (hls_url, a .m3u8 for third-party players and channel tools) when one is available and otherwise hls_status (ready, processing, not_encoded, not_included, private, unavailable) with hls_reason saying what is missing. HLS links are only given for public videos with ready adaptive quality versions (paid plans); plays through them count against the owner's bandwidth but record no views or earnings. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.",
      "inputSchema": {
        "properties": {
          "video_id": {
            "description": "The video's public id (from list_videos / get_video).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "video_id"
        ],
        "type": "object"
      },
      "name": "get_video"
    },
    {
      "description": "Email (or re-send) the invite for a credit that carries an email address, so the person can claim it with their Vidreno account. The same limits as the app apply: a daily cap per account and no repeat email to the same address for the same film within a day. Returns the invite link too; with link_only it only mints the link (nothing is sent), as the editor's copy-link button does.",
      "inputSchema": {
        "properties": {
          "credit_id": {
            "description": "The credit_id from get_film.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "link_only": {
            "default": false,
            "description": "true returns the invite link without sending an email (for the user to pass on themselves); it does not count against the daily email cap.",
            "type": "boolean"
          }
        },
        "required": [
          "film_id",
          "credit_id"
        ],
        "type": "object"
      },
      "name": "invite_film_credit"
    },
    {
      "description": "The user's film orders (buy and rent), newest first, one row per order: film, purchase or rental, price before tax, the payment processor's fee (processor_fee_estimated is true until the real fee is known; it comes off the price first), Vidreno's 10% cut of what is left after that fee, paid or refunded, what was credited and what the order is worth in the balance today (net: 0 once refunded), and dates. Never includes who bought. Filter by film_id (public film id) or status; paginate with page/page_size. Read-only.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "Only this film's orders (a public film id from list_films).",
            "minLength": 1,
            "type": "string"
          },
          "page": {
            "default": 1,
            "description": "1-based page number.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "page_size": {
            "default": 20,
            "description": "Orders per page (max 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "status": {
            "default": "all",
            "description": "Only paid orders, only refunded ones, or every order.",
            "enum": [
              "all",
              "paid",
              "refunded"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_film_sales"
    },
    {
      "description": "List the user's films (On Demand: free to watch or buy/rent), most recently edited first, with optional search and status filter. Returns public film ids to use with the other film tools. Paginate with page/page_size.",
      "inputSchema": {
        "properties": {
          "page": {
            "default": 1,
            "description": "1-based page number.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "page_size": {
            "default": 20,
            "description": "Films per page (max 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "search": {
            "description": "Case-insensitive match against title and synopsis.",
            "maxLength": 200,
            "type": "string"
          },
          "status": {
            "default": "all",
            "description": "Filter by status; default all.",
            "enum": [
              "all",
              "draft",
              "published"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_films"
    },
    {
      "description": "The applications the user has made to other people's projects (the Studio's Applications page), newest first: role, project, status, note and links, whether it can still be withdrawn, the owner's public profile card and the message thread.",
      "inputSchema": {
        "properties": {
          "status": {
            "default": "all",
            "description": "open = still waiting on the owner; all = every application (the default).",
            "enum": [
              "open",
              "all"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_my_applications"
    },
    {
      "description": "Credits that other filmmakers added the user to on their films, pending first: the role and name as written, the film (id, title, status, public page) and the film owner's name. Pending ones await the user's answer (respond_to_credit); accepted ones show on the user's public profile.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_my_credits"
    },
    {
      "description": "The user's cash-out requests, newest first: amount, status (requested, processing, paid or failed with the reason), method, masked destination, requested and paid dates. Read-only; the user requests payouts at https://vidreno.com/payouts. Paginate with page/page_size.",
      "inputSchema": {
        "properties": {
          "page": {
            "default": 1,
            "description": "1-based page number.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "page_size": {
            "default": 20,
            "description": "Payouts per page (max 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "list_payouts"
    },
    {
      "description": "The applications to one of the user's projects (the Studio's Applicants tab), newest first, optionally for one role: each applicant's public profile card (name, handle, roles, location, website and social links, public films), their note and links, status, the owner's next moves, and the message thread. Open applications (submitted or shortlisted) by default; status all includes decided, withdrawn and closed ones.",
      "inputSchema": {
        "properties": {
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "role_id": {
            "description": "Only the applications to this role.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "status": {
            "default": "open",
            "description": "open = still waiting on the owner (submitted or shortlisted, the default); all = every application, including accepted, declined, withdrawn and closed ones.",
            "enum": [
              "open",
              "all"
            ],
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "name": "list_project_applications"
    },
    {
      "description": "List the user's own projects (crew calls on Vidreno Projects), newest first: status (draft, live or closed), visibility, role count, how many applications are waiting, and the public and Studio links. Also says whether the user can post one (the filmmaker-profile requirements and the cap on live projects). Project ids are for the other project tools.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_projects"
    },
    {
      "description": "List the user's hosted videos, newest first, with optional search and visibility filter. Returns public video ids to use with the other tools. Paginate with page/page_size. In urls, share (/player/) is the public link to give out and embed_iframe the embed URL; manage (/video/) is the owner's own editing page, sign-in required, and anyone else opening it is sent to the player page — never hand it out as a share link.",
      "inputSchema": {
        "properties": {
          "page": {
            "default": 1,
            "description": "1-based page number.",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "page_size": {
            "default": 20,
            "description": "Videos per page (max 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "search": {
            "description": "Case-insensitive match against title and description.",
            "maxLength": 200,
            "type": "string"
          },
          "visibility": {
            "default": "all",
            "description": "Filter by visibility; default all.",
            "enum": [
              "all",
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_videos"
    },
    {
      "description": "Make an episode watchable on the series page. Refused, with the editor's message, until its video is ready (start_film_upload with asset: episode) and its season is published (publish_season). The first published, playable episode is what lets the series itself publish (publish_film).",
      "inputSchema": {
        "properties": {
          "episode_id": {
            "description": "The episode's id (from get_film's seasons[].episodes).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "episode_id"
        ],
        "type": "object"
      },
      "name": "publish_episode"
    },
    {
      "description": "Make a film public on its film page. Refused, with the same message the film editor shows, while the publish checklist is incomplete: title, poster, a ready main film, a price only when it is Buy or rent (a free-to-watch film publishes without one), and the creator's rights confirmation. The first time a film is published the user must agree to this statement, which you read to them in full before passing confirm_rights: true: \"I confirm I own or hold every right needed to publish and sell this film, including music, footage, performances and releases from people in it. If it contains any sexual content or nudity, every performer was 18 or older and consented, and I keep records proving it. I accept full responsibility for any claim that it infringes someone's rights, as set out in the Terms of Service – Your warranties (/terms#your-warranties).\" A film that already carries a confirmation is not asked again. The checklist comes back with how to finish each open item: update_film or start_film_upload where a tool can do it, publish_film with confirm_rights for the rights row, and the editor link for the poster, which is added in the film editor, not through this connection.",
      "inputSchema": {
        "properties": {
          "confirm_rights": {
            "description": "The creator's rights confirmation, required the first time a film is published (not asked again once recorded). Pass true only after the user has agreed to this statement, read to them in full: \"I confirm I own or hold every right needed to publish and sell this film, including music, footage, performances and releases from people in it. If it contains any sexual content or nudity, every performer was 18 or older and consented, and I keep records proving it. I accept full responsibility for any claim that it infringes someone's rights, as set out in the Terms of Service – Your warranties (/terms#your-warranties).\"",
            "type": "boolean"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "publish_film"
    },
    {
      "description": "Publish a project: it goes live on its page and, when public, on Projects and Jobs. Refused, with the same message the Studio editor shows, while the checklist is incomplete (title, logline, description, project type, location or remote, shoot dates or dates flexible, at least one role); the answer lists each open item with the tool that completes it (update_project or add_project_role). Also refused by the live-projects cap and while a project is under review. Publishing a closed project reopens it.",
      "inputSchema": {
        "properties": {
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "name": "publish_project"
    },
    {
      "description": "Make a season live on the series page. Refused, with the editor's message, until the season has an episode with a playable video (the episode itself may still be a draft: publishing the season is what lets its episodes be published with publish_episode). The series itself goes public with publish_film.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "season_id"
        ],
        "type": "object"
      },
      "name": "publish_season"
    },
    {
      "description": "Delete an episode and its video; the episodes after it in the season are renumbered. Refused while the episode has been sold or is in a checkout (unpublish_episode instead). Confirm with the user before calling it.",
      "inputSchema": {
        "properties": {
          "episode_id": {
            "description": "The episode's id (from get_film's seasons[].episodes).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "episode_id"
        ],
        "type": "object"
      },
      "name": "remove_episode"
    },
    {
      "description": "Remove one credit from a film's credit list by credit_id (from get_film). A pending invite for it stops working.",
      "inputSchema": {
        "properties": {
          "credit_id": {
            "description": "The credit_id from get_film.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "credit_id"
        ],
        "type": "object"
      },
      "name": "remove_film_credit"
    },
    {
      "description": "Remove a role from a project. A role that already has applications cannot be removed (mark it filled with update_project_role instead), so nobody's thread disappears.",
      "inputSchema": {
        "properties": {
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "role_id": {
            "description": "The role's id (from get_project or search_open_roles).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "project_id",
          "role_id"
        ],
        "type": "object"
      },
      "name": "remove_project_role"
    },
    {
      "description": "Delete a season with all its episodes and their videos; the seasons after it are renumbered. Refused while the season or any of its episodes has been sold or is in a checkout (unpublish_season instead). Confirm with the user before calling it.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "season_id"
        ],
        "type": "object"
      },
      "name": "remove_season"
    },
    {
      "description": "Set the order of a season's episodes: every episode id of that season exactly once, first to last; they are renumbered 1, 2, 3… Episodes do not move between seasons.",
      "inputSchema": {
        "properties": {
          "episode_ids": {
            "description": "Every episode id of that season exactly once, in the new order (renumbered 1, 2, 3…).",
            "items": {
              "description": "The episode's id (from get_film's seasons[].episodes).",
              "maxLength": 64,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "type": "array"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "season_id",
          "episode_ids"
        ],
        "type": "object"
      },
      "name": "reorder_episodes"
    },
    {
      "description": "Set the order of a film's credits: pass every credit_id of the film in the order they should appear.",
      "inputSchema": {
        "properties": {
          "credit_ids": {
            "description": "Every credit_id of the film, in the new order.",
            "items": {
              "description": "The credit_id from get_film.",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991,
              "type": "integer"
            },
            "maxItems": 60,
            "minItems": 1,
            "type": "array"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "credit_ids"
        ],
        "type": "object"
      },
      "name": "reorder_film_credits"
    },
    {
      "description": "Set the order of a series' seasons: every season id exactly once, first to last; they are renumbered 1, 2, 3…",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "season_ids": {
            "description": "Every season id of the series exactly once, in the new order (they are renumbered 1, 2, 3…).",
            "items": {
              "description": "The season's id (from get_film's seasons).",
              "maxLength": 64,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 50,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "film_id",
          "season_ids"
        ],
        "type": "object"
      },
      "name": "reorder_seasons"
    },
    {
      "description": "The owner's move on an application to one of the user's projects: shortlist, accept or decline, with an optional message posted in the thread afterwards. The applicant is e-mailed, exactly as when the owner decides in the Studio. A decision is final (accepted and declined applications cannot be moved again).",
      "inputSchema": {
        "properties": {
          "action": {
            "description": "shortlist (a submitted application), accept or decline (a submitted or shortlisted one).",
            "enum": [
              "shortlist",
              "accept",
              "decline"
            ],
            "type": "string"
          },
          "application_id": {
            "description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "message": {
            "description": "An optional message to the applicant, posted in the thread after the decision.",
            "maxLength": 2000,
            "type": "string"
          }
        },
        "required": [
          "application_id",
          "action"
        ],
        "type": "object"
      },
      "name": "respond_to_application"
    },
    {
      "description": "Accept, decline or unlink a credit another filmmaker gave the user (credit_id from list_my_credits). Accepting a pending credit shows the film on the user's public profile; declining a pending one or unlinking an accepted one keeps the name on the film but removes the link to the user's account.",
      "inputSchema": {
        "properties": {
          "action": {
            "description": "accept a pending credit; decline a pending one or unlink an accepted one (the name stays on the film, the link to your account goes).",
            "enum": [
              "accept",
              "decline",
              "unlink"
            ],
            "type": "string"
          },
          "credit_id": {
            "description": "The credit_id from list_my_credits.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "credit_id",
          "action"
        ],
        "type": "object"
      },
      "name": "respond_to_credit"
    },
    {
      "description": "Search the open roles on Vidreno Jobs (public, live projects only): by free text, department or exact role, country, remote-friendly, pay type and project type, newest projects first, paged with limit and offset (total counts every match; follow next_offset while has_more is true). Each result is the role with its pay and the project (type, format, stage, location, dates, the owner's public profile card) and the public links. Role ids are for apply_to_role.",
      "inputSchema": {
        "properties": {
          "country": {
            "description": "ISO 3166-1 alpha-2 country code of the shoot.",
            "maxLength": 2,
            "type": "string"
          },
          "department": {
            "description": "Only roles in this department.",
            "enum": [
              "Direction & writing",
              "Production",
              "Camera & lighting",
              "Sound & music",
              "Art & design",
              "Post-production",
              "Performance",
              "Other"
            ],
            "type": "string"
          },
          "limit": {
            "default": 20,
            "description": "How many roles to return per page (max 60), newest projects first.",
            "maximum": 60,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "default": 0,
            "description": "How many matching roles to skip: pass next_offset from the previous answer while has_more is true.",
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "pay_type": {
            "description": "Only roles paid this way: paid, expenses, unpaid or deferred.",
            "enum": [
              "paid",
              "expenses",
              "unpaid",
              "deferred"
            ],
            "type": "string"
          },
          "project_type": {
            "description": "Only paid jobs, self_funded or passion projects.",
            "enum": [
              "paid",
              "self_funded",
              "passion"
            ],
            "type": "string"
          },
          "query": {
            "description": "Free-text match (case-insensitive, anywhere in the text) against the role, department, project title, logline, city and the owner's name or handle.",
            "maxLength": 200,
            "type": "string"
          },
          "remote": {
            "description": "true = only projects that welcome remote work.",
            "type": "boolean"
          },
          "role": {
            "description": "Only this exact role, e.g. Gaffer.",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_open_roles"
    },
    {
      "description": "Post a message in an application's thread as the user, whether they are the project owner or the applicant; the other side is e-mailed, as from the Studio. Returns the whole thread. Not possible once the application was withdrawn.",
      "inputSchema": {
        "properties": {
          "application_id": {
            "description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "message": {
            "description": "The message (sent as the user, to the other side of the application).",
            "maxLength": 2000,
            "type": "string"
          }
        },
        "required": [
          "application_id",
          "message"
        ],
        "type": "object"
      },
      "name": "send_application_message"
    },
    {
      "description": "Begin uploading a film's main film or trailer from the user's computer. Files cannot be sent through this connection: the tool returns an upload_url the user opens in their browser (signed in to Vidreno) to pick the file; the upload goes straight to Vidreno's film storage (outside plan storage) and is attached to the film when it finishes, replacing the current file in that slot. Afterwards call get_film to see the new file's state; get_upload_status with the upload_id works too. Links are single-use and expire after about an hour.",
      "inputSchema": {
        "properties": {
          "asset": {
            "description": "Which file this is: main (a feature's main film; the default), trailer (any kind), or episode (one episode of a series; give episode_id, which alone also selects this slot). Replaces the current file in that slot once the upload finishes.",
            "enum": [
              "main",
              "trailer",
              "episode"
            ],
            "type": "string"
          },
          "episode_id": {
            "description": "The episode this video belongs to (from get_film's seasons[].episodes); required for the episode slot.",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "start_film_upload"
    },
    {
      "description": "Begin uploading a new video from the user's computer. Files cannot be sent through this connection: the tool returns an upload_url the user opens in their browser (signed in to Vidreno) to pick the file; the upload goes straight to Vidreno's storage with the metadata given here pre-filled. Afterwards call get_upload_status with the upload_id to get the finished video and its embed code. Links are single-use and expire after about an hour. This is also the right tool when the user attached the video in the chat unless this AI app can supply a temporary https download URL for the attachment (ChatGPT can; use upload_video_from_chat there).",
      "inputSchema": {
        "properties": {
          "description": {
            "description": "Description to give the video once uploaded.",
            "maxLength": 5000,
            "type": "string"
          },
          "title": {
            "description": "Title to give the video once uploaded.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "visibility": {
            "default": "public",
            "description": "Visibility once uploaded; default public.",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "start_video_upload"
    },
    {
      "description": "Take an episode off the series page (back to draft). A published series left with no watchable episode returns to draft. Buyers keep their access.",
      "inputSchema": {
        "properties": {
          "episode_id": {
            "description": "The episode's id (from get_film's seasons[].episodes).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "episode_id"
        ],
        "type": "object"
      },
      "name": "unpublish_episode"
    },
    {
      "description": "Take a film off its public page (back to draft). Viewers who already bought or rented it keep their access.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "unpublish_film"
    },
    {
      "description": "Take a season off the series page (back to draft); its episodes keep their own status and show again when the season is republished. A published series left with no watchable episode returns to draft. Buyers keep their access.",
      "inputSchema": {
        "properties": {
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id",
          "season_id"
        ],
        "type": "object"
      },
      "name": "unpublish_season"
    },
    {
      "description": "Change an episode's title, synopsis, runtime, buy/rent price (US cents, minimum $1.00, null removes) or rental window. Only the fields given change; the same validation as the series editor applies. The video is replaced with start_film_upload (asset: episode), never here.",
      "inputSchema": {
        "properties": {
          "buy_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buy price for this episode in US cents (minimum 100); null removes it. Only sells once the episode is published."
          },
          "episode_id": {
            "description": "The episode's id (from get_film's seasons[].episodes).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "rent_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rental price for this episode in US cents (minimum 100); null removes it."
          },
          "rental_window_hours": {
            "description": "How long an episode rental lasts, in hours.",
            "maximum": 720,
            "minimum": 1,
            "type": "integer"
          },
          "runtime_minutes": {
            "anyOf": [
              {
                "maximum": 6000,
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Runtime in minutes; null clears it."
          },
          "synopsis": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The episode's synopsis; null clears it."
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The episode's title (up to 200 characters); null clears it, leaving \"Episode N\"."
          }
        },
        "required": [
          "film_id",
          "episode_id"
        ],
        "type": "object"
      },
      "name": "update_episode"
    },
    {
      "description": "Change a film's metadata (title, synopsis, director and cast lines, year, runtime, genres from the fixed list, country of production, what it was shot on (capture_format, camera), student_film, filming_locations, awards (checked by the Vidreno team before they show publicly), IMDb link, extra links, the AI disclosure mostly_ai_generated shown as 'Made with AI' on the film page, age_rating (all, 13, 16 or 18 — required to publish; 18+ titles ask viewers to confirm their age before playback) and content_descriptors (sexual content or nudity require age_rating 18), allow_search_engines: off keeps the page reachable by link but hides it from search engines and the sitemap, show_view_count: off keeps the film's view count off its public page and the profile cards, available_countries: where the film can be bought, rented and watched — null for everywhere or a list of ISO country codes; the film page stays visible everywhere and viewers outside the list see a 'Not available in your region' notice instead of the offers, and hide_trailer_outside_countries to withhold the trailer there too), how it is released (access: free = Free to watch, which needs no price; paid = Buy or rent) and its buy/rent prices in US cents (minimum $1.00), or detach its trailer. Only the fields given are changed; the same validation as the film editor applies, and a published film whose publish checklist no longer passes returns to draft. The poster cannot be set here: it is added in the film editor (the edit link). The main film is replaced with start_film_upload, never detached.",
      "inputSchema": {
        "properties": {
          "access": {
            "description": "How the film is released: free (Free to watch) or paid (Buy or rent; needs at least one price to publish).",
            "enum": [
              "free",
              "paid"
            ],
            "type": "string"
          },
          "age_rating": {
            "description": "Age rating of the whole title (a series' rating covers every episode): all = All ages, 13 = 13+, 16 = 16+, 18 = 18+. An 18+ title asks viewers to confirm they're 18 or over before it plays. Sexual content or nudity makes a film 18+. Required to publish; once chosen it can be changed but not cleared.",
            "enum": [
              "13",
              "16",
              "18",
              "all"
            ],
            "type": "string"
          },
          "allow_search_engines": {
            "description": "\"Allow search engines to discover this film\" (on by default). Off keeps the page reachable by its link but hides it from search engines and the sitemap.",
            "type": "boolean"
          },
          "available_countries": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "\"Where viewers can buy and watch\": null = everywhere (the default); a list of ISO 3166-1 alpha-2 codes = only these countries, replaced as a whole. Viewers elsewhere still see the film page, but can't buy, rent or watch. The film page itself stays visible everywhere, so festivals, press and distributors can still find it. Availability is decided by the viewer's IP address, which a VPN can get around. Viewers whose country can't be determined count as outside the list. A series is limited once; its episodes follow."
          },
          "awards": {
            "description": "Festival selections and prizes (festival, award, year); the list is replaced as a whole. Each entry is checked by the Vidreno team before it shows publicly: an unchanged entry keeps its verification, a new or edited one starts as pending.",
            "items": {
              "properties": {
                "award": {
                  "maxLength": 150,
                  "minLength": 1,
                  "type": "string"
                },
                "festival": {
                  "maxLength": 150,
                  "minLength": 1,
                  "type": "string"
                },
                "year": {
                  "anyOf": [
                    {
                      "maximum": 2100,
                      "minimum": 1880,
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "festival",
                "award"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "buy_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buy price in US cents (minimum 100); null removes it. Only used when access is paid."
          },
          "camera": {
            "anyOf": [
              {
                "enum": [
                  "red",
                  "arri",
                  "sony",
                  "canon",
                  "blackmagic",
                  "panasonic",
                  "iphone",
                  "other"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Camera make: red = RED, arri = ARRI, sony = Sony, canon = Canon, blackmagic = Blackmagic, panasonic = Panasonic, iphone = iPhone, other = Other; null clears it."
          },
          "capture_format": {
            "anyOf": [
              {
                "enum": [
                  "digital",
                  "16mm",
                  "35mm",
                  "super8",
                  "other-film"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What it was shot on: digital = Digital, 16mm = 16mm film, 35mm = 35mm film, super8 = Super 8, other-film = Other film stock; null clears it."
          },
          "cast": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cast line, comma separated; null clears it."
          },
          "comments_enabled": {
            "description": "Whether viewers can comment on the film page.",
            "type": "boolean"
          },
          "content_descriptors": {
            "description": "Content descriptors shown on the film page: sexual-content = Sexual content, nudity = Nudity, violence = Violence, strong-language = Strong language, drug-use = Drug use, disturbing = Horror / disturbing scenes. The list is replaced as a whole; an empty list clears it. Sexual content or nudity makes a film 18+. (age_rating must be 18 — the call is refused otherwise).",
            "items": {
              "enum": [
                "sexual-content",
                "nudity",
                "violence",
                "strong-language",
                "drug-use",
                "disturbing"
              ],
              "type": "string"
            },
            "maxItems": 6,
            "type": "array"
          },
          "country": {
            "anyOf": [
              {
                "maxLength": 2,
                "minLength": 2,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Country of production as an ISO 3166-1 alpha-2 code (GB, US, FR…); null clears it."
          },
          "detach": {
            "description": "Remove a file from the film: trailer deletes the current trailer. The main film cannot be detached, only replaced with start_film_upload.",
            "enum": [
              "trailer"
            ],
            "type": "string"
          },
          "director": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Director line shown on the film page (credits are managed separately); null clears it."
          },
          "extra_links": {
            "description": "Extra links shown on the film page (label + URL, up to 20). Replaces the whole list; an empty list clears it.",
            "items": {
              "properties": {
                "label": {
                  "description": "Link text, e.g. Press kit.",
                  "maxLength": 60,
                  "minLength": 1,
                  "type": "string"
                },
                "url": {
                  "description": "https link.",
                  "format": "uri",
                  "maxLength": 2000,
                  "type": "string"
                }
              },
              "required": [
                "label",
                "url"
              ],
              "type": "object"
            },
            "maxItems": 20,
            "type": "array"
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "filming_locations": {
            "description": "Where it was filmed, as free-text places (\"Glasgow, Scotland\"); up to 10, the list is replaced as a whole.",
            "items": {
              "maxLength": 120,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 10,
            "type": "array"
          },
          "genres": {
            "description": "Genres from the fixed list (action = Action, adventure = Adventure, animation = Animation, biography = Biography, comedy = Comedy, crime = Crime, documentary = Documentary, drama = Drama, experimental = Experimental, family = Family, fantasy = Fantasy, history = History, horror = Horror, music = Music, musical = Musical, mystery = Mystery, romance = Romance, sci-fi = Science fiction, sport = Sport, thriller = Thriller, war = War, western = Western); up to 4, the list is replaced as a whole. At least one is required to publish.",
            "items": {
              "enum": [
                "action",
                "adventure",
                "animation",
                "biography",
                "comedy",
                "crime",
                "documentary",
                "drama",
                "experimental",
                "family",
                "fantasy",
                "history",
                "horror",
                "music",
                "musical",
                "mystery",
                "romance",
                "sci-fi",
                "sport",
                "thriller",
                "war",
                "western"
              ],
              "type": "string"
            },
            "maxItems": 4,
            "type": "array"
          },
          "hide_trailer_outside_countries": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "\"Also hide the trailer outside these countries\" (off by default; only applies with available_countries). By default the trailer still plays everywhere, so the film can be previewed where it isn't for sale."
          },
          "imdb_url": {
            "anyOf": [
              {
                "format": "uri",
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "IMDb link; null clears it."
          },
          "mostly_ai_generated": {
            "description": "AI disclosure: true when \"The majority of this film is AI-generated\". Shown to viewers as 'Made with AI' on your film page.",
            "type": "boolean"
          },
          "release_year": {
            "anyOf": [
              {
                "maximum": 2100,
                "minimum": 1888,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Release year; null clears it."
          },
          "rent_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rental price in US cents (minimum 100); null removes it. Only used when access is paid."
          },
          "rental_window_hours": {
            "description": "How long a rental lasts, in hours.",
            "maximum": 720,
            "minimum": 1,
            "type": "integer"
          },
          "runtime_minutes": {
            "anyOf": [
              {
                "maximum": 10000,
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Runtime in minutes; null clears it."
          },
          "show_view_count": {
            "description": "\"Show view and favourite counts publicly\" (on by default). Shows the film's views and favourites on its page and on your profile. Off keeps both numbers to you in Studio.",
            "type": "boolean"
          },
          "student_film": {
            "description": "Made as a student film: Made while studying, as coursework or a graduation film.",
            "type": "boolean"
          },
          "synopsis": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "New synopsis; null clears it."
          },
          "title": {
            "description": "New title.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "film_id"
        ],
        "type": "object"
      },
      "name": "update_film"
    },
    {
      "description": "Change one credit in place by credit_id: its role or name, or who it is linked to (a Vidreno username, which they are asked to accept, or an invite email, which is sent straight away; null clears). The credit keeps its id, position and, when only the role or name changes, its accepted or linked state. Returns the full credit list.",
      "inputSchema": {
        "properties": {
          "credit_id": {
            "description": "The credit_id from get_film.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "email": {
            "anyOf": [
              {
                "format": "email",
                "maxLength": 254,
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Set the invite email (a new address sends the invite now; replaces any username); null clears it."
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "name": {
            "description": "New name as it should appear.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "role": {
            "description": "New role.",
            "maxLength": 40,
            "minLength": 1,
            "type": "string"
          },
          "username": {
            "anyOf": [
              {
                "maxLength": 40,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Link the credit to a Vidreno filmmaker by username (they are asked to accept; replaces any email); null unlinks it."
          }
        },
        "required": [
          "film_id",
          "credit_id"
        ],
        "type": "object"
      },
      "name": "update_film_credit"
    },
    {
      "description": "Change any part of the user's filmmaker profile: username, display name, bio, location, roles (up to 6, presets or custom), website, per-platform social links and whether the profile is public. Only the fields given change; the Profile page's validation, username rules and uniqueness check apply and its messages come back on failure. Avatar changes stay in the Profile page.",
      "inputSchema": {
        "properties": {
          "bio": {
            "anyOf": [
              {
                "maxLength": 1000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Short bio; null clears it."
          },
          "display_name": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Display name; null clears it."
          },
          "location": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Location; null clears it."
          },
          "public": {
            "description": "Whether the profile page is public (needs a valid username and a creator account).",
            "type": "boolean"
          },
          "roles": {
            "description": "The complete list of roles (up to 6; presets like Director, Writer, Screenwriter or custom text). Replaces the current list.",
            "items": {
              "maxLength": 40,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 6,
            "type": "array"
          },
          "social_links": {
            "description": "Per-platform links; only the platforms given change, null removes one.",
            "properties": {
              "imdb": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on imdb; null removes it."
              },
              "instagram": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on instagram; null removes it."
              },
              "letterboxd": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on letterboxd; null removes it."
              },
              "tiktok": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on tiktok; null removes it."
              },
              "vimeo": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on vimeo; null removes it."
              },
              "x": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on x; null removes it."
              },
              "youtube": {
                "anyOf": [
                  {
                    "maxLength": 500,
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "https link on youtube; null removes it."
              }
            },
            "type": "object"
          },
          "username": {
            "description": "New username (the public handle): lower-case letters, digits, dots and underscores; the Profile page's rules and uniqueness check apply.",
            "maxLength": 40,
            "type": "string"
          },
          "website_url": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Website (https link); null clears it."
          }
        },
        "type": "object"
      },
      "name": "update_filmmaker_profile"
    },
    {
      "description": "Change a project's details (the Studio's Details tab): title, logline, description, project type, format, stage, country and city or remote-friendly, shoot dates or dates flexible, links, previous work (the user's own published films, by public id) and its visibility (public or private · invite only). Only the fields given change. Validation and messages are the Studio's own; making a live project public re-runs the publish checklist.",
      "inputSchema": {
        "properties": {
          "city": {
            "anyOf": [
              {
                "maxLength": 120,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "City; null clears it."
          },
          "country_code": {
            "anyOf": [
              {
                "maxLength": 2,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ISO 3166-1 alpha-2 country code of the shoot, e.g. GB, US; null clears it."
          },
          "dates_flexible": {
            "description": "Whether the dates are still flexible (satisfies the dates checklist item on its own).",
            "type": "boolean"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 6000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The story, the plan, what working on it is like. Markdown is accepted: **bold**, *italic*, ## and ### headings, [text](https://url) links, and lists starting with - or 1.; raw HTML is shown as text; null clears it."
          },
          "format": {
            "anyOf": [
              {
                "enum": [
                  "short",
                  "feature",
                  "documentary",
                  "series",
                  "music_video",
                  "commercial",
                  "student",
                  "other"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "short, feature, documentary, series, music_video, commercial, student or other; null clears it."
          },
          "links": {
            "description": "Links shown on the project page (label + URL, up to 4). Replaces the whole list; an empty list clears it.",
            "items": {
              "properties": {
                "label": {
                  "description": "Link text, e.g. Lookbook.",
                  "maxLength": 60,
                  "type": "string"
                },
                "url": {
                  "description": "https link.",
                  "maxLength": 500,
                  "type": "string"
                }
              },
              "required": [
                "label",
                "url"
              ],
              "type": "object"
            },
            "maxItems": 4,
            "type": "array"
          },
          "logline": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "One or two sentences that sell it; null clears it."
          },
          "previous_work_film_ids": {
            "description": "Previous work shown on the project page: public film ids of the user's own published films (get_project lists the options), in display order, up to 6. Replaces the whole list.",
            "items": {
              "maxLength": 64,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 6,
            "type": "array"
          },
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "project_type": {
            "description": "paid (Paid job), self_funded (Self-funded) or passion (Passion project).",
            "enum": [
              "paid",
              "self_funded",
              "passion"
            ],
            "type": "string"
          },
          "remote_friendly": {
            "description": "Whether people can work on it remotely (satisfies the location checklist item on its own).",
            "type": "boolean"
          },
          "shoot_end": {
            "anyOf": [
              {
                "maxLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Last shoot day as YYYY-MM-DD; null clears it."
          },
          "shoot_start": {
            "anyOf": [
              {
                "maxLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "First shoot day as YYYY-MM-DD; null clears it."
          },
          "stage": {
            "anyOf": [
              {
                "enum": [
                  "development",
                  "pre_production",
                  "production",
                  "post_production"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "development, pre_production, production or post_production; null clears it."
          },
          "title": {
            "description": "New title.",
            "maxLength": 120,
            "type": "string"
          },
          "visibility": {
            "description": "public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio).",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "required": [
          "project_id"
        ],
        "type": "object"
      },
      "name": "update_project"
    },
    {
      "description": "Change one of a project's roles: name, how many people, description, pay, or mark it filled (its pending applications close and the applicants are e-mailed) or open again. Only the fields given change; the role keeps its applications.",
      "inputSchema": {
        "properties": {
          "count_needed": {
            "description": "How many people are needed for this role; default 1.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 600,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the role involves; null clears it."
          },
          "filled": {
            "description": "true marks the role filled (its pending applications close and the applicants are e-mailed); false reopens it.",
            "type": "boolean"
          },
          "pay_amount_cents": {
            "anyOf": [
              {
                "maximum": 100000000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only."
          },
          "pay_currency": {
            "anyOf": [
              {
                "enum": [
                  "USD",
                  "EUR",
                  "GBP",
                  "CAD",
                  "AUD",
                  "NZD",
                  "CHF",
                  "SEK",
                  "NOK",
                  "DKK",
                  "PLN",
                  "CZK",
                  "HUF",
                  "JPY",
                  "KRW",
                  "INR",
                  "BRL",
                  "MXN",
                  "ZAR",
                  "SGD",
                  "HKD",
                  "AED",
                  "ILS",
                  "TRY",
                  "NGN",
                  "KES",
                  "PHP",
                  "IDR",
                  "THB",
                  "ARS"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ISO currency code for a paid role, e.g. USD, EUR, GBP."
          },
          "pay_type": {
            "description": "paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share).",
            "enum": [
              "paid",
              "expenses",
              "unpaid",
              "deferred"
            ],
            "type": "string"
          },
          "pay_unit": {
            "anyOf": [
              {
                "enum": [
                  "day",
                  "flat",
                  "hour"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the amount covers for a paid role: day, flat or hour."
          },
          "project_id": {
            "description": "The project's id (from list_projects or create_project).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "role": {
            "description": "The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it).",
            "maxLength": 40,
            "type": "string"
          },
          "role_id": {
            "description": "The role's id (from get_project or search_open_roles).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "project_id",
          "role_id"
        ],
        "type": "object"
      },
      "name": "update_project_role"
    },
    {
      "description": "Change a season's title, synopsis, buy/rent price (US cents, minimum $1.00, null removes) or rental window. Only the fields given change; the same validation as the series editor applies. The season's poster is added in the film editor.",
      "inputSchema": {
        "properties": {
          "buy_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buy price for the whole season in US cents (minimum 100); null removes it. Only sells once the season is published with a playable episode."
          },
          "film_id": {
            "description": "The film's public id (from list_films / get_film).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "rent_price": {
            "anyOf": [
              {
                "maximum": 10000000,
                "minimum": 100,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Rental price for the whole season in US cents (minimum 100); null removes it."
          },
          "rental_window_hours": {
            "description": "How long a season rental lasts, in hours.",
            "maximum": 720,
            "minimum": 1,
            "type": "integer"
          },
          "season_id": {
            "description": "The season's id (from get_film's seasons).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "synopsis": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The season's synopsis; null clears it."
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The season's title (up to 200 characters); null clears it, leaving \"Season N\"."
          }
        },
        "required": [
          "film_id",
          "season_id"
        ],
        "type": "object"
      },
      "name": "update_season"
    },
    {
      "description": "Change a video's title, description, visibility (public/private), player colour or content category. Only the fields given are changed.",
      "inputSchema": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "enum": [
                  "gaming",
                  "education",
                  "music",
                  "tech",
                  "business",
                  "lifestyle",
                  "sports",
                  "entertainment",
                  "news",
                  "other"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Content category used for ad targeting; null clears it."
          },
          "description": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "New description; null clears it."
          },
          "player_color": {
            "anyOf": [
              {
                "description": "Player accent colour as a 6-digit hex value, e.g. #22d3ee.",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Player accent colour; null returns to your brand default."
          },
          "title": {
            "description": "New title.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "video_id": {
            "description": "The video's public id (from list_videos / get_video).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "visibility": {
            "description": "Who can watch: public (anyone with the link / embed) or private (only you).",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "required": [
          "video_id"
        ],
        "type": "object"
      },
      "name": "update_video"
    },
    {
      "description": "Store a video file the user attached in this conversation as a new hosted video. Only usable when the AI app itself fills in a temporary https download_url and file_id for the attachment (ChatGPT does this). Clients that cannot supply such a URL (including Claude) must not call this tool or try to send the file contents: call start_video_upload instead, which gives the user a browser upload link. Pass the attachment as `file`. The file must be a video of at most 512 MB, and the user's plan must have room for it (the same storage rule as any upload). The transfer runs on Vidreno's side; the tool waits briefly and returns status ready (with the video and its embed code), uploading (keep calling get_upload_status with the upload_id until it is ready or failed), or an error explaining what to do instead. For files above the limit or on the user's computer, use start_video_upload.",
      "inputSchema": {
        "properties": {
          "description": {
            "description": "Description for the video.",
            "maxLength": 5000,
            "type": "string"
          },
          "file": {
            "additionalProperties": false,
            "description": "The video file attached in the conversation.",
            "properties": {
              "download_url": {
                "description": "Temporary download URL of the attached file (filled in by the client).",
                "maxLength": 4096,
                "minLength": 1,
                "type": "string"
              },
              "file_id": {
                "description": "The client's id for the attached file.",
                "maxLength": 256,
                "minLength": 1,
                "type": "string"
              },
              "file_name": {
                "description": "The attachment's file name, when the client knows it.",
                "maxLength": 512,
                "type": "string"
              },
              "mime_type": {
                "description": "The attachment's media type, when the client knows it.",
                "maxLength": 128,
                "type": "string"
              }
            },
            "required": [
              "download_url",
              "file_id"
            ],
            "type": "object"
          },
          "title": {
            "description": "Title for the video; defaults to the attachment's file name.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "visibility": {
            "default": "public",
            "description": "Visibility of the video; default public.",
            "enum": [
              "public",
              "private"
            ],
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "type": "object"
      },
      "name": "upload_video_from_chat"
    },
    {
      "description": "Withdraw one of the user's own open applications (submitted or shortlisted). The thread stays readable; a withdrawn application cannot be reopened, so confirm with the user first.",
      "inputSchema": {
        "properties": {
          "application_id": {
            "description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          }
        },
        "required": [
          "application_id"
        ],
        "type": "object"
      },
      "name": "withdraw_application"
    }
  ]
}

What the leaf hashes

{"body":"c52f210cbb688aecc81ad2c5b97c05de0fe4c9681f4e2fd69732ed953ebbd93b","id":1017124,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793274306511779,"prev":770583,"subject":"583db1aa-1040-4964-bf60-16bcc3b0f3a9","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (242798 rows).

  1. 0xf4233b85e2901f915ea5953653332e8a463d76aae576a8a79905307b8f2cdaeb
  2. 0x59fc8b7204ef5efbd273ef80a3d4d51119c4192928b9e805428315d3cfec53c0
  3. 0x01bd8e7fc7d2b1d19a2785b442ab14f717f35f88beeb533571c35281c0228551
  4. 0x0a6c82833e1618f911933b848068226f4c99d4c99925a68b08f7338b5ebc6570
  5. 0xa76fcfe66a18b6299ffb80972f9534682578a71e831b30cdbcdc4b2b9a5d58a0
  6. 0x187c3f130b3d2ba87934071cbbb53f8bc335454e977a135e21541a03ef9b4e0b
  7. 0xb885e3d5b68afeac94dfe5775ac8ccc1074fad768f448cbed2a9f87c3f8545b8
  8. 0xdb3f0b02437ac720efbc6475fcb3dd0c714475e96b888a05f0876d900234e736
  9. 0x4ac3889371c5e8458184759a309a4e4c75302c7c70b10b0d81b8d662e3a4d98c
  10. 0xba01bc8bdc3735d144d6e6c2814e9d6c695d8cce15ee414babcc3a1cd6ee15d4
  11. 0x15476946b3e7fb1518cb2fa1d030271b5c8ab0f28e7a811797403fbbf6856fea
  12. 0x9c0281c2a4bfee33b76e469eeb2b2cf128dbede9395403178364aa32378c6d83
  13. 0xe61db4873d922d736073fbcc17a7758f857abc53591bf83c26e95a8c7fdf1d7f
  14. 0xc7119ea806f683838e5f48055d7f1b7fded1f500c6064dabeb8b9a36bba8932f
  15. 0x1dd763930a8023065a24b676469b4f26d92a89cfe71226ced9df379f43ec0f0a
  16. 0x1597ec94933260048e5e583aff1ad0fd44cc49efcd0a994091ed5db4924d7b02
  17. 0xe01539ac4c9f9cdf265a9e5c6d99c8da11e70ff0c7175fb23e402d33b9d79785
Day root
0xc050555c6b023f2aefb6536efb9f0760b92c30a0d06c572b7daf63db259ea17c
Chained
0x4cde8bae2042512e1bec11650628f0293556311cc4ea74d99ffddf02b671a7d6
Published
On Arc Testnet, block 69753317: 0x9e85c340732f416e431b111fae72f7624870125f7f379af2732eb6c2ba8cf6a1

How to check it · This row as JSON