curl --request POST \
--url https://api.runpulse.com/form/clear \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form file='@example-file' \
--form 'file_url=<string>' \
--form form_id=3c90c3cc-0d44-4b50-8888-8dd25736052a \
--form 'instructions=<string>' \
--form 'form_fields=<string>' \
--form 'page_range=<string>' \
--form 'async=<string>'import requests
url = "https://api.runpulse.com/form/clear"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"file_url": "<string>",
"form_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"instructions": "<string>",
"form_fields": "<string>",
"page_range": "<string>",
"async": "<string>"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('file_url', '<string>');
form.append('form_id', '3c90c3cc-0d44-4b50-8888-8dd25736052a');
form.append('instructions', '<string>');
form.append('form_fields', '<string>');
form.append('page_range', '<string>');
form.append('async', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.runpulse.com/form/clear', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.runpulse.com/form/clear",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.runpulse.com/form/clear"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.runpulse.com/form/clear")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.runpulse.com/form/clear")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"form_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"page_count": 2,
"pdf_url": "<string>",
"form_fields": [
{
"page_number": 2,
"bounding_box": [
0.5
],
"text": "<string>",
"type": "text",
"row": 1,
"col": 1,
"table_idx": 1,
"checkbox_details": [
{
"center_coord": [
0.5
],
"selected": true,
"text": "<string>"
}
]
}
],
"fields_filled": 1,
"fields_cleared": 1,
"credits_used": 123,
"plan_info": {
"tier": "<string>",
"total_credits_used": 123,
"pages_used": 1,
"note": "<string>"
}
}{
"job_id": "<string>",
"status": "pending",
"message": "<string>",
"queuedAt": "2023-11-07T05:31:56Z",
"credits_used": 123
}Clear Form
Remove user-entered data from a PDF form, leaving the blank form template intact. Erases handwritten entries, typed values, and unchecks selected checkboxes — printed labels, field titles, section headers, and other static template content are preserved.
Input modes — provide exactly one of:
form_id— reuse a previously processed form from a prior/form/detect,/form/fill, or/form/clearcall (fast path; cached layout reused).file_url— public or pre-signed URL of a PDF Pulse will download.file— direct binary upload of the PDF.
All three input modes ride on the same multipart/form-data
request body. (Callers sending Content-Type: application/json
with form_id / file_url are still accepted server-side for
backward compatibility, but the SDKs only model the multipart
form.)
instructions is optional. When omitted, Pulse clears every
user-filled field deterministically (no LLM call) on AcroForm
PDFs, eliminating any chance of hallucinated content. Provide
a natural language prompt to clear only specific fields
(e.g. "clear only the address fields"); targeted clears go
through the LLM matcher with a delete-only filter.
Optional form_fields and page_range (alias pages) behave
the same as on Form Fill.
Synchronous by default — returns the cleared FormResult
inline (including a pdf_url you can GET to download the
PDF binary). Set async: true to receive {job_id, status: "pending"} and poll GET /job/.
Billed at 3 credits per page. Requires the form_filler
feature flag to be enabled for your organization.
curl --request POST \
--url https://api.runpulse.com/form/clear \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form file='@example-file' \
--form 'file_url=<string>' \
--form form_id=3c90c3cc-0d44-4b50-8888-8dd25736052a \
--form 'instructions=<string>' \
--form 'form_fields=<string>' \
--form 'page_range=<string>' \
--form 'async=<string>'import requests
url = "https://api.runpulse.com/form/clear"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"file_url": "<string>",
"form_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"instructions": "<string>",
"form_fields": "<string>",
"page_range": "<string>",
"async": "<string>"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('file_url', '<string>');
form.append('form_id', '3c90c3cc-0d44-4b50-8888-8dd25736052a');
form.append('instructions', '<string>');
form.append('form_fields', '<string>');
form.append('page_range', '<string>');
form.append('async', '<string>');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.runpulse.com/form/clear', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.runpulse.com/form/clear",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.runpulse.com/form/clear"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.runpulse.com/form/clear")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.runpulse.com/form/clear")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file_url\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_id\"\r\n\r\n3c90c3cc-0d44-4b50-8888-8dd25736052a\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"instructions\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_fields\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"page_range\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"async\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"form_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"page_count": 2,
"pdf_url": "<string>",
"form_fields": [
{
"page_number": 2,
"bounding_box": [
0.5
],
"text": "<string>",
"type": "text",
"row": 1,
"col": 1,
"table_idx": 1,
"checkbox_details": [
{
"center_coord": [
0.5
],
"selected": true,
"text": "<string>"
}
]
}
],
"fields_filled": 1,
"fields_cleared": 1,
"credits_used": 123,
"plan_info": {
"tier": "<string>",
"total_credits_used": 123,
"pages_used": 1,
"note": "<string>"
}
}{
"job_id": "<string>",
"status": "pending",
"message": "<string>",
"queuedAt": "2023-11-07T05:31:56Z",
"credits_used": 123
}Overview
FormResult synchronously by default. Set async: true to run in the background and poll GET /job/jobId for the result./form/clear strips handwritten entries, typed responses, and selected checkbox marks from a PDF without altering the blank template underneath.
instructions is optional:
- Omit to clear every user-filled value on the form.
- Provide a natural-language prompt (for example
"clear only the address fields") to scope the clear to specific fields.
Providing the PDF
Provide the PDF in exactly one of the following ways:form_id: chain off a prior/form/detect,/form/fill, or/form/clearcall. The cached PDF andform_fieldsare reused, so there is no need to re-upload.file_url: public or presigned URL to a PDF.file: PDF uploaded inline with the request.
400.
multipart/form-data request body, matching the SDK contract.Pricing
Billed at 3 credits per page of the PDF being cleared. Every response also returns a top-levelcredits_used for this request and a cumulative plan_info.total_credits_used snapshot for your organization.
Request
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
form_id | string (uuid) | One of these | Reuse a previously processed form. Skips re-upload and re-detection. |
file_url | string (uri) | One of these | Public or presigned URL of a PDF to download and clear. |
file | binary | One of these | PDF uploaded inline with the request. |
instructions | string | No | Optional natural-language scoping prompt. When omitted, every user-filled value is cleared and the printed template is preserved. |
form_fields | array of FormCell | No | Optional override for the cells used when clearing. |
page_range | string | No | 1-based page filter, for example "1,3-5". Alias pages accepted. |
async | boolean | No | When true, returns { job_id, status: "pending" } immediately (HTTP 202) and processes the job in the background. Default false. |
Response
Sync (200): FormResult
Mirrors the /form/fill response, with fields_cleared substituted for fields_filled.
| Field | Type | Description |
|---|---|---|
form_id | string (uuid) | ID of the new form record produced by this run. Pass back via form_id to chain. |
page_count | integer | Number of pages in the output PDF. |
pdf_url | string (uri) | URL to download the cleared PDF binary. Always points at GET /results/jobId/pdf. Requires the same auth as the rest of the API. |
form_fields | array of FormCell | Detected cells of the resulting (cleared) PDF, refreshed after the clear. |
fields_cleared | integer | Number of cells whose value actually changed during this run. Fields that were already empty are not counted, so on an empty template this returns 0 even when many fields exist. |
credits_used | number | Credits consumed by this request (3 × page_count). |
plan_info | object | { tier, total_credits_used, pages_used } cumulative billing snapshot for your organization (post-request). |
{
"form_id": "98056c28-569b-4689-a34a-396a68a66d4b",
"page_count": 6,
"pdf_url": "https://api.runpulse.com/results/933f730a-4b78-4b8a-bfd5-8aff3d6c880d/pdf",
"form_fields": [ /* refreshed cells of the cleared PDF */ ],
"fields_cleared": 23,
"credits_used": 18.0,
"plan_info": {
"tier": "trial",
"total_credits_used": 1302.0,
"pages_used": 434
}
}
Async (202): FormJobAccepted
When async is true:
{
"job_id": "abc123-def456-ghi789",
"status": "pending"
}
result carries the same FormResult shape that the sync flow would have returned inline.
Status Codes
| Code | Description |
|---|---|
| 200 | Cleared FormResult returned synchronously. |
| 202 | Async job accepted (async: true). Poll /job/{jobId} for the result. |
| 400 | Missing PDF, more than one PDF source provided, or malformed form_fields. |
| 401 | Authentication failed or missing API key. |
| 404 | Referenced form_id not found (or belongs to a different org). |
| 500 | Internal server error. |
Example Usage
Clear All User Input
from pulse import Pulse
client = Pulse(api_key="YOUR_API_KEY")
result = client.form.clear(
file_url="https://example.com/filled-form.pdf",
)
print(f"form_id={result.form_id}")
print(f"fields_cleared={result.fields_cleared}")
print(f"download: {result.pdf_url}")
import { PulseClient } from "pulse-ts-sdk";
const client = new PulseClient({ apiKey: "YOUR_API_KEY" });
const result = await client.form.clear({
file_url: "https://example.com/filled-form.pdf",
});
console.log(`form_id=${result.form_id}`);
console.log(`fields_cleared=${result.fields_cleared}`);
console.log(`download: ${result.pdf_url}`);
curl -X POST https://api.runpulse.com/form/clear \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_url": "https://example.com/filled-form.pdf"
}'
Scoped Clear
Passinstructions to clear only specific fields.
result = client.form.clear(
file_url="https://example.com/filled-form.pdf",
instructions="Clear only the signature and date fields.",
)
const result = await client.form.clear({
file_url: "https://example.com/filled-form.pdf",
instructions: "Clear only the signature and date fields.",
});
curl -X POST https://api.runpulse.com/form/clear \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_url": "https://example.com/filled-form.pdf",
"instructions": "Clear only the signature and date fields."
}'
Chain Fill, Clear, Fill
Clear an existing filled form and immediately re-fill it with new values without re-uploading the PDF. Theform_id returned by each step is the hand-off.
filled = client.form.fill(
file_url="https://example.com/intake-form.pdf",
instructions="Fill in patient name as John Smith.",
)
cleared = client.form.clear(form_id=filled.form_id)
refilled = client.form.fill(
form_id=cleared.form_id,
instructions="Fill in patient name as Jane Doe.",
)
const filled = await client.form.fill({
file_url: "https://example.com/intake-form.pdf",
instructions: "Fill in patient name as John Smith.",
});
const cleared = await client.form.clear({ form_id: filled.form_id! });
const refilled = await client.form.fill({
form_id: cleared.form_id!,
instructions: "Fill in patient name as Jane Doe.",
});
# Step 1: fill
curl -X POST https://api.runpulse.com/form/fill \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file_url":"https://example.com/intake-form.pdf","instructions":"Fill in patient name as John Smith."}'
# Step 2: clear by form_id
curl -X POST https://api.runpulse.com/form/clear \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"form_id": "<form_id from step 1>"}'
# Step 3: fill again by form_id
curl -X POST https://api.runpulse.com/form/fill \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"form_id": "<form_id from step 2>", "instructions": "Fill in patient name as Jane Doe."}'
Async Clear With Polling
import time
submission = client.form.clear(
file_url="https://example.com/big-filled-form.pdf",
async_=True,
)
while True:
job = client.jobs.get_job(job_id=submission.job_id)
if job.status in ("completed", "failed"):
break
time.sleep(2)
result = job.result
print(f"fields_cleared={result['fields_cleared']} pdf_url={result['pdf_url']}")
curl -X POST https://api.runpulse.com/form/clear \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_url": "https://example.com/big-filled-form.pdf",
"async": true
}'
Authorizations
Body
/form/clear request body. All three input modes (file,
file_url, form_id) ride on this single multipart/form-data
schema; the server validates that exactly one is provided.
Direct binary upload of the PDF. Mutually exclusive with file_url and form_id.
Public or pre-signed URL of a PDF Pulse will download. Mutually exclusive with file and form_id.
Reference to a previously processed form. Mutually exclusive with file / file_url.
Optional natural language description of what to clear. When omitted, Pulse clears everything user-filled deterministically.
Optional JSON-encoded array of FormCell objects to override detected cells. Multipart bodies must serialise this field as a string.
Restrict the operation to a subset of pages, e.g. "1-3,5".
Set to "true" to run asynchronously and receive {job_id, status} immediately.
Response
Cleared FormResult returned synchronously.
Result body returned by /form/detect, /form/fill, and
/form/clear. For async jobs (async: true) the same shape is
served back under result on
GET /job/{jobId} [blocked].
ID of the form record produced by this run. Pass to a subsequent /form/detect, /form/fill, or /form/clear call as the single input source to iterate without re-uploading the PDF.
Number of pages in the output PDF.
x >= 1URL to download the resulting PDF binary. Always points at GET /results/{jobId}/pdf [blocked] for the originating job. Authenticated callers can replay this URL until the underlying artifact is garbage-collected.
Detected cells of the resulting PDF (refreshed from the filled/cleared output for fill/clear, or freshly detected for /form/detect). Use these as a starting point for further edits.
Show child attributes
Show child attributes
Number of cells that were filled by this run. Present on /form/fill responses only.
x >= 0Number of cells that were cleared by this run. Present on /form/clear responses only.
x >= 0Number of credits consumed by this request. Detect charges 1 credit per page; fill and clear charge 3 credits per page.
Billing tier and cumulative usage information for the calling org, including this form run.
Show child attributes
Show child attributes