Publish films, monetise them, earn money, and host and embed videos on sites and apps.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The person's name as it should appear.
The role, e.g. Director, Editor, Lead actor.
The film's public id (from list_films / get_film).
Invite the person by email instead: the credit is stored and an invite email is sent now.
1-based position in the credit list; default last.
Link the credit to an existing Vidreno filmmaker account by username (they are asked to accept).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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.
| Argument | Type | Description |
|---|---|---|
| name* | string | The person's name as it should appear. |
| role* | string | The role, e.g. Director, Editor, Lead actor. |
| string | Invite the person by email instead: the credit is stored and an invite email is sent now. | |
| film_id* | string | The film's public id (from list_films / get_film). |
| position | integer | 1-based position in the credit list; default last. |
| username | string | Link the credit to an existing Vidreno filmmaker account by username (they are asked to accept). |
{
"type": "object",
"required": [
"film_id",
"role",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The person's name as it should appear."
},
"role": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "The role, e.g. Director, Editor, Lead actor."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254,
"description": "Invite the person by email instead: the credit is stored and an invite email is sent now."
},
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"position": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based position in the credit list; default last."
},
"username": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "Link the credit to an existing Vidreno filmmaker account by username (they are asked to accept)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| role* | string | The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it). |
| pay_type* | string | paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share). |
| pay_unit | any | What the amount covers for a paid role: day, flat or hour. |
| project_id* | integer | The project's id (from list_projects or create_project). |
| description | any | What the role involves; null clears it. |
| count_needed | integer | How many people are needed for this role; default 1. |
| pay_currency | any | ISO currency code for a paid role, e.g. USD, EUR, GBP. |
| pay_amount_cents | any |
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.
| Argument | Type | Description |
|---|---|---|
| note | string | A note to the owner (up to 600 characters): why the user fits the role. |
| links | array | Up to 3 https links (reel, portfolio). |
| role_id* | integer | The role's id (from get_project or search_open_roles). |
{
"type": "object",
"required": [
"role_id"
],
"properties": {
"note": {
"type": "string",
"maxLength": 600,
"description": "A note to the owner (up to 600 characters): why the user fits the role."
},
"links": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 3,
"description": "Up to 3 https links (reel, portfolio)."
},
"role_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The role's id (from get_project or search_open_roles).",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | 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. |
| project_id* | integer | The project's id (from list_projects or create_project). |
{
"type": "object",
"required": [
"project_id",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"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."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
{
"type": "object",
"required": [
"film_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
}
}
}Create a new draft film from a title, 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.
| Argument | Type | Description |
|---|---|---|
| title* | string | The film's title (up to 200 characters); everything else is set afterwards. |
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The film's title (up to 200 characters); everything else is set afterwards."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| title | string | The project's working title (up to 120 characters); "Untitled project" until set. |
| visibility | string | public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio). |
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"description": "The project's working title (up to 120 characters); \"Untitled project\" until set."
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string",
"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)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Must be true. Ask the user to confirm before calling; deletion is permanent and removes the file from Vidreno's storage. |
| video_id* | string | The video's public id (from list_videos / get_video). |
{
"type": "object",
"required": [
"video_id",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "Must be true. Ask the user to confirm before calling; deletion is permanent and removes the file from Vidreno's storage."
},
"video_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The video's public id (from list_videos / get_video)."
}
}
}The connected creator's account overview: which product it is set up for (creator_mode: Films, or Host & Embed 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.
No arguments.
{
"type": "object",
"properties": {},
"description": "No arguments."
}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.
| Argument | Type | Description |
|---|---|---|
| days | integer | Length of the daily views window in days (default 30). |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 365,
"minimum": 1,
"description": "Length of the daily views window in days (default 30)."
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| loop | boolean | Restart when finished. |
| muted | boolean | Start muted. |
| width | integer | Fixed width in pixels (only when responsive is false). |
| height | integer | 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). |
| autoplay | boolean | Start playing on load (browsers require muted for this to work). |
| controls | boolean | Show the player controls. |
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.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
{
"type": "object",
"required": [
"film_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}Identify the Vidreno account this connection belongs to. Call this when the user asks which account is connected.
No arguments.
{
"type": "object",
"properties": {},
"description": "No arguments."
}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.
| Argument | Type | Description |
|---|---|---|
| project_id* | integer | The project's id (from list_projects or create_project). |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| upload_id* | string | The upload_id returned by start_video_upload or upload_video_from_chat. |
{
"type": "object",
"required": [
"upload_id"
],
"properties": {
"upload_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "The upload_id returned by start_video_upload or upload_video_from_chat."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| video_id* | string | The video's public id (from list_videos / get_video). |
{
"type": "object",
"required": [
"video_id"
],
"properties": {
"video_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The video's public id (from list_videos / get_video)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
| credit_id* | integer | The credit_id from get_film. |
| link_only | boolean | 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": "object",
"required": [
"film_id",
"credit_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"credit_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_id from get_film.",
"exclusiveMinimum": 0
},
"link_only": {
"type": "boolean",
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| status | string | Only paid orders, only refunded ones, or every order. |
| film_id | string | Only this film's orders (a public film id from list_films). |
| page_size | integer | Orders per page (max 50). |
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based page number."
},
"status": {
"enum": [
"all",
"paid",
"refunded"
],
"type": "string",
"default": "all",
"description": "Only paid orders, only refunded ones, or every order."
},
"film_id": {
"type": "string",
"minLength": 1,
"description": "Only this film's orders (a public film id from list_films)."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Orders per page (max 50)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| search | string | Case-insensitive match against title and synopsis. |
| status | string | Filter by status; default all. |
| page_size | integer | Films per page (max 50). |
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based page number."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Case-insensitive match against title and synopsis."
},
"status": {
"enum": [
"all",
"draft",
"published"
],
"type": "string",
"default": "all",
"description": "Filter by status; default all."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Films per page (max 50)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| status | string | open = still waiting on the owner; all = every application (the default). |
{
"type": "object",
"properties": {
"status": {
"enum": [
"open",
"all"
],
"type": "string",
"default": "all",
"description": "open = still waiting on the owner; all = every application (the default)."
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| page_size | integer | Payouts per page (max 50). |
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based page number."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Payouts per page (max 50)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| status | string | open = still waiting on the owner (submitted or shortlisted, the default); all = every application, including accepted, declined, withdrawn and closed ones. |
| role_id | integer | Only the applications to this role. |
| project_id* | integer | The project's id (from list_projects or create_project). |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"status": {
"enum": [
"open",
"all"
],
"type": "string",
"default": "open",
"description": "open = still waiting on the owner (submitted or shortlisted, the default); all = every application, including accepted, declined, withdrawn and closed ones."
},
"role_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only the applications to this role.",
"exclusiveMinimum": 0
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
}
}
}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.
No arguments.
{
"type": "object",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| search | string | Case-insensitive match against title and description. |
| page_size | integer | Videos per page (max 50). |
| visibility | string | Filter by visibility; default all. |
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based page number."
},
"search": {
"type": "string",
"maxLength": 200,
"description": "Case-insensitive match against title and description."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Videos per page (max 50)."
},
"visibility": {
"enum": [
"all",
"public",
"private"
],
"type": "string",
"default": "all",
"description": "Filter by visibility; default all."
}
}
}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. 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.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
| confirm_rights | boolean | 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. 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": "object",
"required": [
"film_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"confirm_rights": {
"type": "boolean",
"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. 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).\""
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| project_id* | integer | The project's id (from list_projects or create_project). |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
}
}
}Remove one credit from a film's credit list by credit_id (from get_film). A pending invite for it stops working.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
| credit_id* | integer | The credit_id from get_film. |
{
"type": "object",
"required": [
"film_id",
"credit_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"credit_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_id from get_film.",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| role_id* | integer | The role's id (from get_project or search_open_roles). |
| project_id* | integer | The project's id (from list_projects or create_project). |
{
"type": "object",
"required": [
"project_id",
"role_id"
],
"properties": {
"role_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The role's id (from get_project or search_open_roles).",
"exclusiveMinimum": 0
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
}
}
}Set the order of a film's credits: pass every credit_id of the film in the order they should appear.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
| credit_ids* | array | Every credit_id of the film, in the new order. |
{
"type": "object",
"required": [
"film_id",
"credit_ids"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"credit_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_id from get_film.",
"exclusiveMinimum": 0
},
"maxItems": 60,
"minItems": 1,
"description": "Every credit_id of the film, in the new order."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| action* | string | shortlist (a submitted application), accept or decline (a submitted or shortlisted one). |
| message | string | An optional message to the applicant, posted in the thread after the decision. |
| application_id* | integer | The application's id (from list_project_applications, list_my_applications or apply_to_role). |
{
"type": "object",
"required": [
"application_id",
"action"
],
"properties": {
"action": {
"enum": [
"shortlist",
"accept",
"decline"
],
"type": "string",
"description": "shortlist (a submitted application), accept or decline (a submitted or shortlisted one)."
},
"message": {
"type": "string",
"maxLength": 2000,
"description": "An optional message to the applicant, posted in the thread after the decision."
},
"application_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| action* | string | 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). |
| credit_id* | integer | The credit_id from list_my_credits. |
{
"type": "object",
"required": [
"credit_id",
"action"
],
"properties": {
"action": {
"enum": [
"accept",
"decline",
"unlink"
],
"type": "string",
"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)."
},
"credit_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_id from list_my_credits.",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| role | string | Only this exact role, e.g. Gaffer. |
| limit | integer | How many roles to return per page (max 60), newest projects first. |
| query | string | Free-text match (case-insensitive, anywhere in the text) against the role, department, project title, logline, city and the owner's name or handle. |
| offset | integer | How many matching roles to skip: pass next_offset from the previous answer while has_more is true. |
| remote | boolean | true = only projects that welcome remote work. |
| country | string | ISO 3166-1 alpha-2 country code of the shoot. |
| pay_type | string | Only roles paid this way: paid, expenses, unpaid or deferred. |
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.
| Argument | Type | Description |
|---|---|---|
| message* | string | The message (sent as the user, to the other side of the application). |
| application_id* | integer | The application's id (from list_project_applications, list_my_applications or apply_to_role). |
{
"type": "object",
"required": [
"application_id",
"message"
],
"properties": {
"message": {
"type": "string",
"maxLength": 2000,
"description": "The message (sent as the user, to the other side of the application)."
},
"application_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| asset | string | Which file this is: the main film or the trailer. Replaces the current one once the upload finishes. |
| film_id* | string | The film's public id (from list_films / get_film). |
{
"type": "object",
"required": [
"film_id"
],
"properties": {
"asset": {
"enum": [
"main",
"trailer"
],
"type": "string",
"default": "main",
"description": "Which file this is: the main film or the trailer. Replaces the current one once the upload finishes."
},
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| title | string | Title to give the video once uploaded. |
| visibility | string | Visibility once uploaded; default public. |
| description | string | Description to give the video once uploaded. |
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Title to give the video once uploaded."
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string",
"default": "public",
"description": "Visibility once uploaded; default public."
},
"description": {
"type": "string",
"maxLength": 5000,
"description": "Description to give the video once uploaded."
}
}
}Take a film off its public page (back to draft). Viewers who already bought or rented it keep their access.
| Argument | Type | Description |
|---|---|---|
| film_id* | string | The film's public id (from list_films / get_film). |
{
"type": "object",
"required": [
"film_id"
],
"properties": {
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
}
}
}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, 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), 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.
| Argument | Type | Description |
|---|---|---|
| cast | any | Cast line, comma separated; null clears it. |
| title | string | New title. |
| access | string | How the film is released: free (Free to watch) or paid (Buy or rent; needs at least one price to publish). |
| awards | array | 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. |
| camera | any | Camera make: red = RED, arri = ARRI, sony = Sony, canon = Canon, blackmagic = Blackmagic, panasonic = Panasonic, iphone = iPhone, other = Other; null clears it. |
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.
| Argument | Type | Description |
|---|---|---|
| name | string | New name as it should appear. |
| role | string | New role. |
| any | Set the invite email (a new address sends the invite now; replaces any username); null clears it. | |
| film_id* | string | The film's public id (from list_films / get_film). |
| username | any | Link the credit to a Vidreno filmmaker by username (they are asked to accept; replaces any email); null unlinks it. |
| credit_id* | integer | The credit_id from get_film. |
{
"type": "object",
"required": [
"film_id",
"credit_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "New name as it should appear."
},
"role": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "New role."
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254
},
{
"type": "null"
}
],
"description": "Set the invite email (a new address sends the invite now; replaces any username); null clears it."
},
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"username": {
"anyOf": [
{
"type": "string",
"maxLength": 40,
"minLength": 1
},
{
"type": "null"
}
],
"description": "Link the credit to a Vidreno filmmaker by username (they are asked to accept; replaces any email); null unlinks it."
},
"credit_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The credit_id from get_film.",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| bio | any | Short bio; null clears it. |
| roles | array | The complete list of roles (up to 6; presets like Director, Writer, Screenwriter or custom text). Replaces the current list. |
| public | boolean | Whether the profile page is public (needs a valid username and a creator account). |
| location | any | Location; null clears it. |
| username | string | New username (the public handle): lower-case letters, digits, dots and underscores; the Profile page's rules and uniqueness check apply. |
| website_url | any | Website (https link); null clears it. |
| display_name | any | Display name; null clears it. |
| social_links | object | Per-platform links; only the platforms given change, null removes one. |
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.
| Argument | Type | Description |
|---|---|---|
| city | any | City; null clears it. |
| links | array | Links shown on the project page (label + URL, up to 4). Replaces the whole list; an empty list clears it. |
| stage | any | development, pre_production, production or post_production; null clears it. |
| title | string | New title. |
| format | any | short, feature, documentary, series, music_video, commercial, student or other; null clears it. |
| logline | any | One or two sentences that sell it; null clears it. |
| shoot_end | any | Last shoot day as YYYY-MM-DD; null clears it. |
| project_id* | integer | The project's id (from list_projects or create_project). |
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.
| Argument | Type | Description |
|---|---|---|
| role | string | The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it). |
| filled | boolean | true marks the role filled (its pending applications close and the applicants are e-mailed); false reopens it. |
| role_id* | integer | The role's id (from get_project or search_open_roles). |
| pay_type | string | paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share). |
| pay_unit | any | What the amount covers for a paid role: day, flat or hour. |
| project_id* | integer | The project's id (from list_projects or create_project). |
| description | any | What the role involves; null clears it. |
| count_needed | integer | How many people are needed for this role; default 1. |
Change a video's title, description, visibility (public/private), player colour or content category. Only the fields given are changed.
| Argument | Type | Description |
|---|---|---|
| title | string | New title. |
| category | any | Content category used for ad targeting; null clears it. |
| video_id* | string | The video's public id (from list_videos / get_video). |
| visibility | string | Who can watch: public (anyone with the link / embed) or private (only you). |
| description | any | New description; null clears it. |
| player_color | any | Player accent colour; null returns to your brand default. |
{
"type": "object",
"required": [
"video_id"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "New title."
},
"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."
},
"video_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The video's public id (from list_videos / get_video)."
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string",
"description": "Who can watch: public (anyone with the link / embed) or private (only you)."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "null"
}
],
"description": "New description; null clears it."
},
"player_color": {
"anyOf": [
{
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Player accent colour as a 6-digit hex value, e.g. #22d3ee."
},
{
"type": "null"
}
],
"description": "Player accent colour; null returns to your brand default."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| file* | object | The video file attached in the conversation. |
| title | string | Title for the video; defaults to the attachment's file name. |
| visibility | string | Visibility of the video; default public. |
| description | string | Description for the video. |
{
"type": "object",
"required": [
"file"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"maxLength": 256,
"minLength": 1,
"description": "The client's id for the attached file."
},
"file_name": {
"type": "string",
"maxLength": 512,
"description": "The attachment's file name, when the client knows it."
},
"mime_type": {
"type": "string",
"maxLength": 128,
"description": "The attachment's media type, when the client knows it."
},
"download_url": {
"type": "string",
"maxLength": 4096,
"minLength": 1,
"description": "Temporary download URL of the attached file (filled in by the client)."
}
},
"description": "The video file attached in the conversation.",
"additionalProperties": false
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Title for the video; defaults to the attachment's file name."
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string",
"default": "public",
"description": "Visibility of the video; default public."
},
"description": {
"type": "string",
"maxLength": 5000,
"description": "Description for the video."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| application_id* | integer | The application's id (from list_project_applications, list_my_applications or apply_to_role). |
{
"type": "object",
"required": [
"application_id"
],
"properties": {
"application_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The application's id (from list_project_applications, list_my_applications or apply_to_role).",
"exclusiveMinimum": 0
}
}
}| The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only. |
{
"type": "object",
"required": [
"project_id",
"role",
"pay_type"
],
"properties": {
"role": {
"type": "string",
"maxLength": 40,
"description": "The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it)."
},
"pay_type": {
"enum": [
"paid",
"expenses",
"unpaid",
"deferred"
],
"type": "string",
"description": "paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share)."
},
"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": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 600
},
{
"type": "null"
}
],
"description": "What the role involves; null clears it."
},
"count_needed": {
"type": "integer",
"default": 1,
"maximum": 100,
"minimum": 1,
"description": "How many people are needed for this role; default 1."
},
"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_amount_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 100000000,
"minimum": 0
},
{
"type": "null"
}
],
"description": "The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only."
}
}
}| video_id* |
| string |
| The video's public id (from list_videos / get_video). |
| alignment | string | Horizontal alignment inside the host page. |
| responsive | boolean | True for a fluid embed that fills its container at the video's own aspect ratio; false for a fixed pixel size. |
| corner_radius | integer | Corner radius in pixels; 0 for square corners. |
| allow_fullscreen | boolean | Allow the fullscreen button. |
{
"type": "object",
"required": [
"video_id"
],
"properties": {
"loop": {
"type": "boolean",
"default": false,
"description": "Restart when finished."
},
"muted": {
"type": "boolean",
"default": false,
"description": "Start muted."
},
"width": {
"type": "integer",
"default": 560,
"maximum": 4096,
"minimum": 1,
"description": "Fixed width in pixels (only when responsive is false)."
},
"height": {
"type": "integer",
"maximum": 4096,
"minimum": 1,
"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)."
},
"autoplay": {
"type": "boolean",
"default": false,
"description": "Start playing on load (browsers require muted for this to work)."
},
"controls": {
"type": "boolean",
"default": true,
"description": "Show the player controls."
},
"video_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The video's public id (from list_videos / get_video)."
},
"alignment": {
"enum": [
"left",
"center",
"right"
],
"type": "string",
"default": "center",
"description": "Horizontal alignment inside the host page."
},
"responsive": {
"type": "boolean",
"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."
},
"corner_radius": {
"type": "integer",
"default": 10,
"maximum": 64,
"minimum": 0,
"description": "Corner radius in pixels; 0 for square corners."
},
"allow_fullscreen": {
"type": "boolean",
"default": true,
"description": "Allow the fullscreen button."
}
}
}| department | string | Only roles in this department. |
| project_type | string | Only paid jobs, self_funded or passion projects. |
{
"type": "object",
"properties": {
"role": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "Only this exact role, e.g. Gaffer."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 60,
"minimum": 1,
"description": "How many roles to return per page (max 60), newest projects first."
},
"query": {
"type": "string",
"maxLength": 200,
"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."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "How many matching roles to skip: pass next_offset from the previous answer while has_more is true."
},
"remote": {
"type": "boolean",
"description": "true = only projects that welcome remote work."
},
"country": {
"type": "string",
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code of the shoot."
},
"pay_type": {
"enum": [
"paid",
"expenses",
"unpaid",
"deferred"
],
"type": "string",
"description": "Only roles paid this way: paid, expenses, unpaid or deferred."
},
"department": {
"enum": [
"Direction & writing",
"Production",
"Camera & lighting",
"Sound & music",
"Art & design",
"Post-production",
"Performance",
"Other"
],
"type": "string",
"description": "Only roles in this department."
},
"project_type": {
"enum": [
"paid",
"self_funded",
"passion"
],
"type": "string",
"description": "Only paid jobs, self_funded or passion projects."
}
}
}| detach | string | Remove a file from the film: trailer deletes the current trailer. The main film cannot be detached, only replaced with start_film_upload. |
| genres | array | 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. |
| country | any | Country of production as an ISO 3166-1 alpha-2 code (GB, US, FR…); null clears it. |
| film_id* | string | The film's public id (from list_films / get_film). |
| director | any | Director line shown on the film page (credits are managed separately); null clears it. |
| imdb_url | any | IMDb link; null clears it. |
| synopsis | any | New synopsis; null clears it. |
| buy_price | any | Buy price in US cents (minimum 100); null removes it. Only used when access is paid. |
| rent_price | any | Rental price in US cents (minimum 100); null removes it. Only used when access is paid. |
| extra_links | array | Extra links shown on the film page (label + URL, up to 20). Replaces the whole list; an empty list clears it. |
| release_year | any | Release year; null clears it. |
| student_film | boolean | Made as a student film: Made while studying, as coursework or a graduation film. |
| capture_format | any | What it was shot on: digital = Digital, 16mm = 16mm film, 35mm = 35mm film, super8 = Super 8, other-film = Other film stock; null clears it. |
| runtime_minutes | any | Runtime in minutes; null clears it. |
| show_view_count | boolean | "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. |
| comments_enabled | boolean | Whether viewers can comment on the film page. |
| filming_locations | array | Where it was filmed, as free-text places ("Glasgow, Scotland"); up to 10, the list is replaced as a whole. |
| mostly_ai_generated | boolean | AI disclosure: true when "The majority of this film is AI-generated". Shown to viewers as 'Made with AI' on your film page. |
| rental_window_hours | integer | How long a rental lasts, in hours. |
| allow_search_engines | boolean | "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": "object",
"required": [
"film_id"
],
"properties": {
"cast": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "null"
}
],
"description": "Cast line, comma separated; null clears it."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "New title."
},
"access": {
"enum": [
"free",
"paid"
],
"type": "string",
"description": "How the film is released: free (Free to watch) or paid (Buy or rent; needs at least one price to publish)."
},
"awards": {
"type": "array",
"items": {
"type": "object",
"required": [
"festival",
"award"
],
"properties": {
"year": {
"anyOf": [
{
"type": "integer",
"maximum": 2100,
"minimum": 1880
},
{
"type": "null"
}
]
},
"award": {
"type": "string",
"maxLength": 150,
"minLength": 1
},
"festival": {
"type": "string",
"maxLength": 150,
"minLength": 1
}
}
},
"maxItems": 20,
"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."
},
"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."
},
"detach": {
"enum": [
"trailer"
],
"type": "string",
"description": "Remove a file from the film: trailer deletes the current trailer. The main film cannot be detached, only replaced with start_film_upload."
},
"genres": {
"type": "array",
"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,
"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."
},
"country": {
"anyOf": [
{
"type": "string",
"maxLength": 2,
"minLength": 2
},
{
"type": "null"
}
],
"description": "Country of production as an ISO 3166-1 alpha-2 code (GB, US, FR…); null clears it."
},
"film_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The film's public id (from list_films / get_film)."
},
"director": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Director line shown on the film page (credits are managed separately); null clears it."
},
"imdb_url": {
"anyOf": [
{
"type": "string",
"format": "uri",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "IMDb link; null clears it."
},
"synopsis": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "null"
}
],
"description": "New synopsis; null clears it."
},
"buy_price": {
"anyOf": [
{
"type": "integer",
"maximum": 10000000,
"minimum": 100
},
{
"type": "null"
}
],
"description": "Buy price in US cents (minimum 100); null removes it. Only used when access is paid."
},
"rent_price": {
"anyOf": [
{
"type": "integer",
"maximum": 10000000,
"minimum": 100
},
{
"type": "null"
}
],
"description": "Rental price in US cents (minimum 100); null removes it. Only used when access is paid."
},
"extra_links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "https link."
},
"label": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Link text, e.g. Press kit."
}
}
},
"maxItems": 20,
"description": "Extra links shown on the film page (label + URL, up to 20). Replaces the whole list; an empty list clears it."
},
"release_year": {
"anyOf": [
{
"type": "integer",
"maximum": 2100,
"minimum": 1888
},
{
"type": "null"
}
],
"description": "Release year; null clears it."
},
"student_film": {
"type": "boolean",
"description": "Made as a student film: Made while studying, as coursework or a graduation film."
},
"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."
},
"runtime_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 10000,
"minimum": 1
},
{
"type": "null"
}
],
"description": "Runtime in minutes; null clears it."
},
"show_view_count": {
"type": "boolean",
"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."
},
"comments_enabled": {
"type": "boolean",
"description": "Whether viewers can comment on the film page."
},
"filming_locations": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"maxItems": 10,
"description": "Where it was filmed, as free-text places (\"Glasgow, Scotland\"); up to 10, the list is replaced as a whole."
},
"mostly_ai_generated": {
"type": "boolean",
"description": "AI disclosure: true when \"The majority of this film is AI-generated\". Shown to viewers as 'Made with AI' on your film page."
},
"rental_window_hours": {
"type": "integer",
"maximum": 720,
"minimum": 1,
"description": "How long a rental lasts, in hours."
},
"allow_search_engines": {
"type": "boolean",
"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": "object",
"properties": {
"bio": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"description": "Short bio; null clears it."
},
"roles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"maxItems": 6,
"description": "The complete list of roles (up to 6; presets like Director, Writer, Screenwriter or custom text). Replaces the current list."
},
"public": {
"type": "boolean",
"description": "Whether the profile page is public (needs a valid username and a creator account)."
},
"location": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Location; null clears it."
},
"username": {
"type": "string",
"maxLength": 40,
"description": "New username (the public handle): lower-case letters, digits, dots and underscores; the Profile page's rules and uniqueness check apply."
},
"website_url": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Website (https link); null clears it."
},
"display_name": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
],
"description": "Display name; null clears it."
},
"social_links": {
"type": "object",
"properties": {
"x": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on x; null removes it."
},
"imdb": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on imdb; null removes it."
},
"vimeo": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on vimeo; null removes it."
},
"tiktok": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on tiktok; null removes it."
},
"youtube": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on youtube; null removes it."
},
"instagram": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on instagram; null removes it."
},
"letterboxd": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "https link on letterboxd; null removes it."
}
},
"description": "Per-platform links; only the platforms given change, null removes one."
}
}
}| visibility | string | public (listed on Projects and Jobs, open to everyone) or private (invite only: reachable only by the people the owner invites from the Studio). |
| description | any | 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. |
| shoot_start | any | First shoot day as YYYY-MM-DD; null clears it. |
| country_code | any | ISO 3166-1 alpha-2 country code of the shoot, e.g. GB, US; null clears it. |
| project_type | string | paid (Paid job), self_funded (Self-funded) or passion (Passion project). |
| dates_flexible | boolean | Whether the dates are still flexible (satisfies the dates checklist item on its own). |
| remote_friendly | boolean | Whether people can work on it remotely (satisfies the location checklist item on its own). |
| previous_work_film_ids | array | 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. |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"city": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"description": "City; null clears it."
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 500,
"description": "https link."
},
"label": {
"type": "string",
"maxLength": 60,
"description": "Link text, e.g. Lookbook."
}
}
},
"maxItems": 4,
"description": "Links shown on the project page (label + URL, up to 4). Replaces the whole list; an empty list 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": {
"type": "string",
"maxLength": 120,
"description": "New title."
},
"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."
},
"logline": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "One or two sentences that sell it; null clears it."
},
"shoot_end": {
"anyOf": [
{
"type": "string",
"maxLength": 10
},
{
"type": "null"
}
],
"description": "Last shoot day as YYYY-MM-DD; null clears it."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string",
"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)."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 6000
},
{
"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."
},
"shoot_start": {
"anyOf": [
{
"type": "string",
"maxLength": 10
},
{
"type": "null"
}
],
"description": "First shoot day as YYYY-MM-DD; null clears it."
},
"country_code": {
"anyOf": [
{
"type": "string",
"maxLength": 2
},
{
"type": "null"
}
],
"description": "ISO 3166-1 alpha-2 country code of the shoot, e.g. GB, US; null clears it."
},
"project_type": {
"enum": [
"paid",
"self_funded",
"passion"
],
"type": "string",
"description": "paid (Paid job), self_funded (Self-funded) or passion (Passion project)."
},
"dates_flexible": {
"type": "boolean",
"description": "Whether the dates are still flexible (satisfies the dates checklist item on its own)."
},
"remote_friendly": {
"type": "boolean",
"description": "Whether people can work on it remotely (satisfies the location checklist item on its own)."
},
"previous_work_film_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 6,
"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."
}
}
}| pay_currency | any | ISO currency code for a paid role, e.g. USD, EUR, GBP. |
| pay_amount_cents | any | The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only. |
{
"type": "object",
"required": [
"project_id",
"role_id"
],
"properties": {
"role": {
"type": "string",
"maxLength": 40,
"description": "The role, e.g. Director of photography, Gaffer, Editor (the department is derived from it)."
},
"filled": {
"type": "boolean",
"description": "true marks the role filled (its pending applications close and the applicants are e-mailed); false reopens it."
},
"role_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The role's id (from get_project or search_open_roles).",
"exclusiveMinimum": 0
},
"pay_type": {
"enum": [
"paid",
"expenses",
"unpaid",
"deferred"
],
"type": "string",
"description": "paid (needs amount, currency and unit), expenses (expenses only), unpaid, or deferred (deferred / profit share)."
},
"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": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project's id (from list_projects or create_project).",
"exclusiveMinimum": 0
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 600
},
{
"type": "null"
}
],
"description": "What the role involves; null clears it."
},
"count_needed": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "How many people are needed for this role; default 1."
},
"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_amount_cents": {
"anyOf": [
{
"type": "integer",
"maximum": 100000000,
"minimum": 0
},
{
"type": "null"
}
],
"description": "The pay in the currency's minor unit (cents): 15000 with USD = $150. Paid roles only."
}
}
}