• AI reference · Area media

publish_asset

Publish asset. Put work in the company's media library for the owner to review.

Where it is

In the media area (films, carousels and pictures in the media library): open it with tools_for { area: "media" }, then call it with use_tool { name: "publish_asset", args }.

Does it need a yes?

Runs at once, no yes card: it changes only the office's own working state, and nothing reaches anyone. Here: a private draft in the media library.

Inputs

InputTypeNeededAbout
filestringnoThe file or folder on this machine, as a full path. Or use from_submission. · 1 to 1,024 characters
from_submissionobjectnoOne file of an upload where it is stored (no disk online): its id, file key and your lease from claim_submission.
from_submission.subIdstringyesformat `^[a-f0-9]{24}$`
from_submission.fileKeystringyesformat `^[A-Za-z0-9_-]{1,64}$`
from_submission.leasestringyesformat `^[a-f0-9]{32}$`
titlestringnoA human title, never an id (required for a new piece) · up to 120 characters
projectstringno"<Kind> · <Name>", e.g. "Film · First client". Required for a new piece · up to 120 characters
agentstringnoup to 120 characters
idstringnoOptional stable id; default project + file name. An existing piece's id: this file becomes its new version (hosted too) · up to 120 characters
status"draft" | "review"nodraft or review (default review); only the owner approves
notesstringnoup to 20,000 characters
captionstringnoThe planned post text · up to 5,000 characters
seriesstringnoup to 80 characters
orderintegerno0 to 999
kindLabelstringnoup to 80 characters
changeNotestringnoup to 300 characters
scriptPathstringnoThe script the piece follows · up to 2,000 characters
tagsarray of stringnoup to 20 items
relatedAssetsarray of stringnoA short's film, by its Media id · up to 20 items
replacebooleannoA new version of the piece: id names it, else the same project and file name
ladder"full" | "copy" | "none"no
posterAtnumberno0 or more
posterstringnoYour own poster for a film: an absolute path to a picture · 1 to 1,024 characters
waitbooleannotrue: return when it is done
spendarray of objectnoPaid calls that made this piece. Append-only, one line per request id · up to 100 items
spend[].whatstringyesWhat was paid for, e.g. 'Voice-over' · 1 to 200 characters
spend[].usdnumberyesCost in US dollars, 0 to 100 · 0 to 100
spend[].provider"fal" | "higgsfield" | "elevenlabs" | "openai" | "anthropic" | "google" | "other"yesWho was paid
spend[].modelstringnoThe model or voice used · 1 to 120 characters
spend[].requestIdstringyesThe provider's request id. The same id with the same details changes nothing · 1 to 120 characters
spend[].atstringnoWhen it was made (default now) · up to 40 characters
spend[].editIdstringnoformat `^[a-f0-9]{24}$`
moodsarray of stringnoMusic: how it feels, e.g. calm, hopeful · up to 40 items
usesarray of stringnoMusic: what it is for, e.g. bed under talk, intro · up to 40 items
energy"low" | "mid" | "high"noMusic: low, mid or high
bpmnumbernoMusic: tempo, 30 to 300 · 30 to 300
musicalKeystringnoMusic: key, e.g. 'Am' or 'F# maj' · 1 to 8 characters
loopsCleanlybooleannoMusic: the end joins the start without a click
madeBy"agent" | "owner"noWho made the music: agent or owner
scoreType"background" | "full" | "agent-buildup"noMusic: background, full or agent-buildup. Music: background (a bed under talk), full (a complete piece), agent-buildup (an agent built it)
derivedFromobjectnoMusic fitted from another piece. Its id, revision and the target length.
derivedFrom.itemIdstringyes1 to 160 characters
derivedFrom.revisionintegeryes0 or more
derivedFrom.targetSecondsnumberyes1 to 7200
derivedFrom.endOnPhrasebooleanno
composedFromobjectnoMusic built from these sources and packs
composedFrom.sourceIdsarray of stringnoup to 20 items
composedFrom.packIdsarray of stringnoup to 20 items
importedSourceobjectnoBought or borrowed music: its source and licence
importedSource.namestringyes1 to 200 characters
importedSource.referencestringyes1 to 2,000 characters
importedSource.licensestringyes1 to 2,000 characters
agentOkfalsenofalse takes it off the agent music shelf. Only the owner puts music on, in the app
editobjectnoThis piece is one part of an edit (the upload id)
edit.idstringyesformat `^[a-f0-9]{24}$`
edit.role"final" | "raw" | "collage" | "proof" | "music" | "source-text"yes
edit.revisionintegerno1 to 1000
review_notestringnoWhat you need from the owner, in a few words (shown at the top of the viewer). · up to 500 characters
departmentstringnoThe department it is for, e.g. sales · format `^[a-z0-9-]{1,40}$`
taskintegernoThe task this work is for, so the owner sees it there. · 1 or more
run_idstringnoYour run id from the connector's start, so the output ties back to this session · format `^[A-Za-z0-9_.:@-]{1,120}$`
from_urlstringnoHosted: a public https address of the file. Up to 200 MB; the server fetches it. · up to 2,000 characters
uploadobjectnoHosted or cloud, any size: the file's name and size. The answer gives a short permission to send it straight to the company's own media library (one HTTPS PUT, or TUS for a film); then call again with the same arguments.
upload.namestringyes1 to 200 characters
upload.sizeintegeryes1 or more
upload.sha256stringnoThe file's SHA-256 in hex, needed for any file but a film. The permission is then good only for exactly these bytes. · format `^[a-f0-9]{64}$`
requestIdstringnoA stable id for this file, the same on every call. Required with upload; used with from_url. · format `^[A-Za-z0-9_.:@-]{6,120}$`

Example

{
  "name": "publish_asset",
  "arguments": {}
}

When it is refused

  • invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.
  • not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.
  • not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.
  • taken: Someone else holds it (another AI on that task). Pick another task.
  • stale: It changed since you read it. Read it again and use the new version.
  • failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.