Nodaro Docs
DocumentationNode ReferenceModelsAI Agents (MCP)DevelopersSelf-hostingResearch
Tools reference

Jobs

Check, wait for, list and diagnose Nodaro jobs from an AI assistant, with the job envelope, statuses, held jobs, retryable failures and fallback models.

The job tools let an assistant follow the work Nodaro does for it. Almost every generation tool starts a job and returns its id at once; get_job and wait_for_job report when it finishes and where the result is, list_jobs lists your recent jobs, and diagnose_run explains a failure. All four need the jobs:read permission and cost no credits.

Job statuses

StatusMeaning
pending, queued, processingThe job is waiting or running. Keep checking.
pending_reviewThe result exists, but the deployment holds it for a person to review. Keep checking, and never run the job again.
completedThe job is done. outputUrl and outputData hold the result.
failedThe job failed. Read retryable and guidance.
cancelledThe job was cancelled.

A held job ends as completed when the reviewer approves it, or as failed with a policy reason when the reviewer rejects it. A client that follows the job through the MCP tasks API sees a held job as input_required: the decision belongs to the reviewer, so do not ask the user for new parameters.

The job envelope

get_job and wait_for_job return the same structured result, the job envelope. get_asset returns it too, without input.

FieldWhat it holds
jobId, jobTypeThe job id and what kind of job it is
status, progressThe status above, and the progress while it runs
assetKindimage, video, audio, or null for a text or data result
outputUrlThe finished image, video or audio
outputDataStructured output, such as a transcript, an alignment or an analysis
inputWhat the model was actually sent (see below), or null
errorMessageThe error of a failed job
creditsThe credits of the job
createdAt, startedAt, completedAtTimestamps
retryable, guidance, suggestedProviderOn a failed, cancelled or held job: whether the same request can succeed, a sentence on what to do, and a fallback model when one exists

input is a safe subset of the request, enough to check what the model received. Nothing outside this list is included:

  • prompt, the prompt as rendered, after pickers, subjects and references were folded in, and userPrompt, your own words.
  • negativePrompt, and the direction and subject picker ids.
  • provider, model, duration, resolution and aspectRatio.
  • imageUrl, endFrameUrl, and the reference image, video and audio URLs.
  • The job type.

get_job

Returns one of your jobs by id, as the job envelope. Use it to check a job every 5 to 10 seconds until it finishes.

Permission: jobs:read. Credits: free.

ParameterTypeNotes
job_idstringRequired. The id a generation tool returned.

Returns: the job envelope.

wait_for_job

Blocks until one of your jobs finishes, then returns the job envelope. Use it instead of a tight loop of get_job calls.

Permission: jobs:read. Credits: free.

ParameterTypeNotes
job_idstringRequired. The job to wait for.
timeout_sintegerSeconds to wait, from 1 to 120. Default 60.

Returns: the job envelope. When the job is still running at the deadline, the status is timeout. That is not an error: call wait_for_job again, or poll get_job. A held job answers pending_review at once. For a long video render, polling get_job every 5 to 10 seconds is better than repeated waits.

list_jobs

Lists your recent jobs as structured data: status, type, output URL, error, credits and timestamps. Use it for questions such as "how many generations failed yesterday". When the user wants to see the results, use browse_gallery, which shows a grid.

Permission: jobs:read. Credits: free.

ParameterTypeNotes
kindsarrayMedia kinds to include: any of image, video, audio. Default ["image", "video"], so audio is left out unless you ask for it.
statusstringOne of pending, queued, processing, pending_review, completed, failed, cancelled.
scopestringmine (default) for your own jobs, or public for recent public results of other users.
limitintegerFrom 1 to 200. Default 50.
cursorstringThe next_cursor of the previous page.

Returns: a page of jobs and a next_cursor for the next page.

diagnose_run

Explains why a workflow run or a single job failed. Pass either id: the tool tries a workflow run first and falls back to a job.

Permission: jobs:read. Credits: free.

ParameterTypeNotes
idstringRequired. A workflow run id or a job id.

Returns: for a workflow run, every node with its job id, type and status (nodes). This is the only tool that maps the nodes of a run to their job ids. Each failed node also carries its error message, its model, the credits actually charged (creditsActual), a failure class and a hint on how to fix it.

Failure classMeaning
content_policyA safety filter blocked the prompt or the result
validationThe settings or the input were not accepted
rate_limitedThe request hit a rate limit
timeoutThe run took too long
post_processingThe model delivered, but a step after it failed
provider_errorThe model's service returned an error
unknownThe error matches none of the classes above

The class is a best guess from the error text, so treat it as guidance. Reserved credits are refunded automatically for every class except post_processing, because in that case the model already delivered its work.

When a job fails

  1. Read retryable. false means the same request will fail again unchanged. That happens after a content policy block, or when the model refused the combination of settings and input media.
  2. Follow suggestedProvider. When a safety filter blocked the result and the catalog has a fallback model, the job names it. Run the same prompt and references on that model instead of guessing another one.
  3. Change the request when the model refused it. An error that says the model rejected these settings means the duration, aspect ratio, resolution or a reference file does not fit that model. Change them, or pick a model whose capability sheet in list_models allows the combination.
  4. Retry the rest. A temporary error from the model's service stays retryable, even when its wording sounds like a validation problem.

More fixes are in Troubleshooting.

Frequently asked questions

Last updated on

On this page