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.10.0) and TypeScript (npm install valyu-js, valyu-js >= 2.8.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.
Template reference
Variables
Variables
Typed inputs filled in at run time. Each variable has a
Placeholders use
key, label, type, an optional required flag, and optional placeholder, help, examples, and validation (min_length, max_length, pattern, enum).| Type | Use for |
|---|---|
text | Short single-line values (ticker, company name) |
textarea | Longer free-form context or instructions |
number | Numeric inputs (year, headcount, target multiple) |
date | ISO YYYY-MM-DD dates |
enum | A fixed set of choices defined in validation.enum |
{key} syntax. Every placeholder must map to a declared variable and every declared variable must be referenced, or the API returns unreferenced_template_vars.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
| Limit | Value |
|---|---|
| Text field size | 64 KB per field |
| Variables per workflow | ≤ 50 |
| Deliverables per workflow | ≤ 20 |
| Tags per workflow | ≤ 20 |
| Org workflow quota | 100 (default) |
| Code | Meaning |
|---|---|
workflow_not_found | No workflow matches the slug |
cannot_edit_valyu_workflow / cannot_delete_valyu_workflow | Valyu-curated workflows are read-only |
workflow_quota_exceeded | Org hit its workflow quota |
workflow_and_freeform_mutually_exclusive | Both workflow_id and freeform fields were sent |
unreferenced_template_vars | A declared variable is unused (or vice versa) |
changelog_required | A version was published without a changelog |
invalid_output_formats | More than one schema, a schema mixed with markdown/pdf, or toon without a schema |
field_too_long | A text field exceeded 64 KB |
too_many_variables / too_many_deliverables | Count exceeded the limit |
{ "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.
