Skip to main content
cesteralDocs
FAQContact

Poll Node

Submit an async MCP job, poll until it completes, and download the results

Last updated 24 Jun 2026

The Poll node drives the submit → poll → download lifecycle of an asynchronous MCP tool. It optionally submits a job, repeatedly calls a status tool at a configured interval until a completion (or failure) value is detected, then optionally downloads the result. It is built for long-running platform operations — report generation, bulk exports, audience builds — that return a job handle immediately and produce data later.

When to Use

Use Poll when an MCP server exposes an async job pattern: one tool starts the work and returns a job ID, a second tool reports status, and a third returns the finished payload. If an upstream MCP node has already submitted the job, leave the submit step blank and Poll will start from the status check.

Configuration

FieldTypeDescription
connectionIdstringMCP connection used for all three steps
submitToolNamestringOptional tool that starts the job (skip if an upstream node already submitted)
submitArgumentsTemplatecodeArguments for the submit tool, with template interpolation
pollToolNamestringTool that returns the job status
pollArgumentsTemplatecodeArguments for the poll tool (e.g. the job ID from submit)
completionFieldstringField in the poll response to inspect for completion (e.g. status)
completionValuesstringComma-separated values that mean "done" (e.g. complete, COMPLETE)
failureValuesstringComma-separated values that mean "failed" (stops polling early)
downloadToolNamestringOptional tool that fetches the finished result
downloadArgumentsTemplatecodeArguments for the download tool
intervalSecondsnumberSeconds between poll attempts (default: 30, range 5–300)
maxAttemptsnumberMaximum poll attempts before timing out (default: 20, range 1–100)
backoffMultipliernumberMultiplier applied to the interval after each attempt (default: 1, no backoff)
maxIntervalSecondsnumberUpper bound on the interval when backoff is enabled (default: 300)
responseMapping.dataPathstringDot-notation path to the records in the final response (e.g. data.rows)
responseMapping.outputModereplace | merge | appendHow to combine the result with incoming records (default: replace)

Example

Poll a TikTok report job to completion, then download it:

connectionId: <tiktok-connection-uuid>
submitToolName: tiktok_submit_report
pollToolName: tiktok_check_report_status
completionField: status
completionValues: complete, COMPLETE
failureValues: failed, ERROR
downloadToolName: tiktok_download_report
intervalSeconds: 30
maxAttempts: 20

Every 30 seconds the status tool runs; when status is complete, the download tool fetches the report and its rows pass downstream.

Notes

  • The submit call is governed; poll and download calls are read-only and skip guardrail evaluation.
  • If maxAttempts is exhausted, the node fails with Polling timed out after N attempts — it does not emit a timeout record.
  • If completionField matches a value in failureValues, polling stops immediately and the node fails.
  • Set backoffMultiplier above 1 to space out attempts over time; maxIntervalSeconds caps the growth.
  • Poll runs on Inngest's durable step.sleep() between attempts, so long waits survive worker restarts without holding an open connection.

Related articles

Still stuck? Browse the FAQ or contact us.