This guide covers practical tips for getting reliable results from Edit: choosing how to drive a run, controlling the output, and running at scale.
Natural-language instructions are the fastest way to get started, but a schema with extend_edit:value on each field gives you exact, repeatable control over what gets filled and where. Reach for a schema whenever you run the same form type repeatedly or need deterministic output.
Don’t have a schema yet? Generate Edit Schema detects a form’s fields and returns one with positions annotated, so you can start from a real layout instead of hand-writing field positions. See Schema.
When field mapping isn’t obvious — ambiguous labels, fields that depend on conditions — add instructions to guide how those fields should be filled. You can combine instructions with a schema: the schema pins the values you know, and instructions steer the rest.
See Instructions.
Set advancedOptions.flattenPdf to true when you’re generating a document for delivery, so the filled fields can’t be edited further. Flattening is on by default; set it to false if you need the output to remain an editable form.
See Flatten the PDF.
For forms with large table regions you want filled, set advancedOptions.tableParsingEnabled to true so Extend parses those regions as arrays of objects you can populate.
See Table parsing.
output.editedFile.presignedUrl expires 15 minutes after the run completes. Fetch and store the file as soon as the run reaches PROCESSED — don’t hold the URL for later use. The edited file’s id is reusable as input to other endpoints if you need to reprocess it.
Ready-to-run config blocks for common scenarios (comments explain each setting). For field-level options and defaults, see Configuration.
The quick start and the examples above use the synchronous /edit endpoint — the fastest way to try Edit and iterate on config. When you’re ready to run Edit in production, switch to the asynchronous /edit_runs endpoint.
Why the sync /edit endpoint isn’t built for production:
What async (/edit_runs) gives you:
GET /edit_runs/{id}) or webhooks, so you’re not holding connections open.The SDK helpers (client.edit_runs.create_and_poll() / client.editRuns.createAndPoll()) create a run and poll until it reaches a terminal state for you. See Async Processing for the full comparison, polling options, and webhook setup, and Error Handling for handling failed runs.