Skip to main content
This page covers the operational side of the migration: how you wait for results, how you receive notifications, how long data lives, and what limits apply.

Sync, polling, or webhooks

Chunkr gives you two ways to get a result: poll the task, or receive a webhook. Extend keeps both and adds a third, synchronous endpoints that hold the HTTP request open until the run finishes.
Never use the synchronous endpoints for production traffic. Large PDFs and spreadsheets routinely exceed 5 minutes. Chunkr’s 1-hour task timeout has no equivalent on async runs; they run until complete.

Polling

Replacing a polling loop

If you followed our task handling guide, you have a tenacity or p-retry loop around tasks.parse.get. create_and_poll replaces it, including backoff.
The helper polls every second for the first 30 seconds, then backs off to a maximum of 30 seconds between polls. Without max_wait_ms it polls indefinitely; with it, a PollingTimeoutError is raised when exceeded.

Separate create and retrieve

If you store IDs and poll from a separate worker, the two-step pattern still exists.

Async Python

Chunkr’s AsyncChunkr client has an equivalent: AsyncExtend. Method names and arguments are identical to the sync client; add await.

Webhooks

What changes

Chunkr fired a webhook for Starting and Processing as well as completion. If your handler ignored non-terminal events, nothing changes. If it relied on them for progress tracking, poll retrieve for intermediate status instead.
Extend only emits run events for runs created through the API. Runs started from the Extend dashboard do not trigger webhooks.

Create an endpoint

You can do this in the dashboard or programmatically. The signingSecret is returned once; store it in your secrets manager.

Verify and handle events

Replace your Svix verification with the SDK helper. Pass the raw request body; re-serializing JSON changes whitespace and breaks the signature.
Return a 2xx promptly, as you did for Chunkr. Extend retries failed deliveries and the dashboard lets you inspect and re-send any message. For manual verification steps and the Go SDK, see Extend’s webhook guide.

Event payloads

Chunkr’s payload was { event_type, task_id, status, message }. Extend’s payload depends on the event: parse_run.* events carry a minimal status object (id, status, failureReason, failureMessage, metadata) with no output, while extract_run.* events carry the full run. Treat the webhook as a notification and fetch the run by payload.id, as the handler above does; that keeps both paths identical and avoids depending on payload size. For very large payloads you can configure the endpoint to deliver a signed download URL instead; verify_and_parse handles that when called with allow_signed_url=True. The full catalogue is on Extend’s events page.

Data retention

Chunkr stored outputs indefinitely unless you set expires_in. Extend has no per-run expiry parameter. To use Extend as a pure processing engine, delete runs and files once you have retrieved results.
Extend’s default retention is documented in their data handling policy.

Presigned URLs

Chunkr’s base64_urls=True option embedded assets inline so they would not expire. On Extend, figure images (details.imageUrl), outputUrl, and file presignedUrl all expire (15 minutes for parse outputs and file downloads). Download anything you need to keep as soon as the run completes.

Limits

Error handling

Extend returns structured errors with a code, a retryable flag, and a requestId to quote to support. Failed runs (status: "FAILED") carry failureReason and failureMessage. See Extend’s error reference.

Next Steps

FAQ

Accounts, deployment, legacy API, and feature differences.

Extend async processing guide

Full polling options and webhook recommendations.