Workflows are in Beta. The API and schema may change. Endpoints live under
/v1/workflows and runs go through the existing DeepResearch task lifecycle.{variables}, then run it by filling in those variables. It’s the highest-leverage way to use DeepResearch for repeatable knowledge work - earnings previews, diligence reads, market sizings, competitor scans - where the structure stays fixed and only the inputs change.
A workflow bundles a prompt template (with {variable} placeholders), deliverables (xlsx/docx/pptx/pdf/csv), a research strategy and report format, and recommended tools and mode.
Two scopes: Valyu-curated workflows are read-only and available to every org (run, preview, inspect). Your org’s workflows are private templates you create and version, with a default quota of 100 per org.
How a workflow runs
Running a workflow is a DeepResearch task. You passworkflow_id and workflow_params to POST /v1/deepresearch/tasks; the template resolves server-side into a normal run with the same auth, billing, mode pricing, and task lifecycle.
The core endpoints: GET /v1/workflows to discover, GET /v1/workflows/{slug} to inspect variables and deliverables, POST /v1/workflows/{slug}/preview to resolve the template without running (no credits), and POST /v1/deepresearch/tasks to run. Custom org workflows add POST /v1/workflows (create), PATCH /v1/workflows/{slug} (publish a new version), and DELETE /v1/workflows/{slug}.
Both SDKs ship native workflow support: valyu.workflows in Python (pip install valyu, valyu-py >= 2.12.0) and TypeScript (npm install valyu-js, valyu-js >= 2.10.0). Every workflow response is an object with a success boolean and an optional error string.
Discover and inspect
List workflows, then read a chosen one to see its variables and deliverables. There are 44 Valyu-curated workflows across verticals -investment-banking, private-equity, hedge-funds, consulting, life-sciences, legal-regulatory, sales-intelligence, and supply-chain. Filter the list by scope (valyu | org | all), vertical, q, or tags.
{ workflows, total, next_cursor, verticals }. Each row carries slug, version, vertical, tags, title, subtitle, description, popular, recommended_mode, estimated_time, is_valyu, owner_org_id, variables, deliverables, and timestamps. Pass expand=true to also include the template body (prompt, strategy, report_format, tools, output_formats). Ownership is is_valyu / owner_org_id - filter on it with scope.
Preview (optional)
Resolve the template against your params without running it (no credits spent) to confirm the final prompt, deliverables, and mode.{ workflow: { slug, version }, resolved: { input, research_strategy, report_format, deliverables, mode, tools, output_formats }, estimated_credits }. Pass workflow_version (Python workflow_version, TS workflowVersion) to preview a specific version.
Run a workflow
Runs go throughdeepresearch.create (POST /v1/deepresearch/tasks) with workflow_id and workflow_params; optionally pin workflow_version. workflow_id is mutually exclusive with query/input/research_strategy/report_format. The create response echoes the resolved workflow: { slug, version }, and the run is a normal DeepResearch task - poll /status and fetch deliverables from the task assets.
Per-run overrides
A workflow template supplies the freeform fields - prompt, research strategy, report format - and sensible defaults formode, deliverables, and tools. Every other deepresearch.create option still applies to a workflow run, and a value in the request body wins over the template’s.
That covers deliverables, search, previous_reports, hitl, urls, files, mcp_servers, brand_collection_id, metadata, webhook_url, and alert_email. tools is the exception: it is merged with the template, so a tool the template enables stays enabled unless you explicitly set that tool to false.
Per-run overrides on a workflow run need
valyu-py >= 2.12.0 or valyu-js >= 2.10.0. Earlier SDK versions dropped these fields when workflow_id was set, so the run silently used the template defaults instead. The REST API has always accepted them.Template reference
Variables
Variables
Typed inputs filled in at run time. Each variable has a
key, label, type, an optional required flag, and optional placeholder, help, examples, and validation (min_length, max_length, pattern, enum).Placeholders use
{key} syntax. Every {placeholder} in the template must map to a variable declared in variables, or the API returns unreferenced_template_vars. Declared variables that aren’t referenced in the template are allowed.Deliverables
Deliverables
Output artifacts, each with a
type and description: xlsx (Excel), docx (Word), pptx (PowerPoint), pdf, and csv.xlsx, docx, and pptx require code_execution enabled in the workflow’s tools. Charts are free; screenshots, code execution, and extra deliverables carry small surcharges. See Pricing.Tools and mode
Tools and mode
A workflow recommends
tools (code_execution, screenshots, browser_use, charts - each a boolean) and a recommended_mode (fast ~$0.10, standard ~$0.50, heavy ~$2.50, max ~$15.00). Override either in the run request body.Output formats
Output formats
A version body accepts an optional
output_formats array. Items are the strings "markdown", "pdf", or "toon", and/or one JSON-schema object for structured output. The rules:- At most one JSON-schema object.
- A schema object cannot be combined with
"markdown"or"pdf". "toon"requires a schema object.
400 invalid_output_formats. output_formats is returned on workflow detail, on list with ?expand=true, and in preview under resolved.output_formats. At run time, a task created with workflow_id inherits the workflow’s output_formats when the request doesn’t pass its own; a request-level output_formats always wins.A structured forecasting workflow that returns an evidence packet might set:Versioning
Versioning
Versions are immutable.
PATCH /v1/workflows/{slug} (or valyu.workflows.update(...)) publishes a new version by supplying a version body, which must include a changelog (omitting it returns changelog_required). Pin workflow_version to keep older runs reproducible. List history with GET /v1/workflows/{slug}/versions - it returns { slug, versions: [...] } where each row carries version, recommended_mode, estimated_time, changelog, created_at, and is_current. Fetch a workflow resolved at a version with GET /v1/workflows/{slug}?version=N.Limits and error codes
Limits and error codes
Workflow errors come back as
{ "error": "<code>", "message": "<human text>" }.Create and version your own
Custom workflows are private to your org (quota 100 by default). Create one with a slug, title, and aversion body holding the prompt, strategy, report format, and optional variables, deliverables, tools, and output_formats. Editing Valyu-curated workflows returns 403 cannot_edit_valyu_workflow.
{ slug, deleted_at }.
Wire up a workflow run in your code
Paste into your AI coding assistant to run a Valyu Workflow from your codebase, with full parameter guidance.
Next steps
Workflows quickstart
Run your first workflow in 2 minutes.
DeepResearch guide
The async research engine workflows run on.
List workflows API
Full endpoint reference for
/v1/workflows.Run via tasks API
Pass
workflow_id to POST /v1/deepresearch/tasks.
