Verify an AcroForm is unchanged from its bound hash.
Use describe("pdf.validate.form-integrity") when your code needs the complete live JSON Schemas.
At a glance
| Property | Value |
|---|---|
| Package | @runstamp/forms |
| Domain / verb | pdf / validate |
| Customer jobs | validate |
| Deterministic | Yes |
| Side effects | none |
Availability
| Local | SDK | CLI | MCP | Managed API |
|---|---|---|---|---|
| public ga | public ga | public ga | public ga | public ga |
Managed API route: POST /api/v2/operations/pdf/validate/form-integrity. Managed execution requires a free-trial workspace or an active Platform or Enterprise workspace, and an environment-bound API key.
Input and result
| Schema | Required fields | Optional fields |
|---|---|---|
| Input | artifactId, bytesBase64, sha256, tenantId, version, output, expectedOperation, values | none |
| Options | none | operation, deterministic, deterministicSeed, timeoutMs, limits, locale, lossPolicy |
| Result value | output, artifacts | none |
Every success also carries losses, diagnostics, and a hash-bound receipt.
Defaults, limits, and format constraints
Defaults
| Path | Default |
|---|---|
$.deterministic | default=true |
$.lossPolicy | default="collect" |
Formats and profiles
| Path | Constraint |
|---|---|
$.version | minLength=1maxLength=16384 |
$.output.mediaType | const="application/pdf" |
$.output.inspection.version | minLength=1maxLength=16384 |
$.output.receipt.sourceVersion | minLength=1maxLength=16384 |
$.output.receipt.version | const="runstamp.forms.receipt.v1" |
Other limits
| Path | Constraint |
|---|---|
$.artifactId | pattern="^[a-f0-9]{64}$" |
$.bytesBase64 | minLength=4maxLength=89478492pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" |
$.sha256 | pattern="^[a-f0-9]{64}$" |
$.tenantId | minLength=1maxLength=16384 |
$.output.bytes | minLength=4maxLength=89478492pattern="^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" |
$.output.byteLength | minimum=1maximum=67108864 |
$.output.hash | pattern="^sha256:[a-f0-9]{64}$" |
$.output.inspection.artifactId | pattern="^[a-f0-9]{64}$" |
$.output.inspection.byteLength | minimum=1maximum=67108864 |
$.output.inspection.fields | maxItems=10000 |
$.output.inspection.fields[].id | minLength=1maxLength=16384 |
$.output.inspection.fields[].name | minLength=1maxLength=16384 |
$.output.inspection.fields[].widgets | maxItems=25000 |
$.output.inspection.fields[].widgets[].id | minLength=1maxLength=16384 |
$.output.inspection.fields[].widgets[].locator.artifactId | minLength=1maxLength=16384 |
$.output.inspection.fields[].widgets[].locator.pageIndex | minimum=0 |
$.output.inspection.fields[].widgets[].pageIndex | minimum=0 |
$.output.inspection.fields[].maxLength | minimum=0 |
$.output.inspection.fields[].options | maxItems=10000 |
$.output.inspection.losses | maxItems=10000 |
$.output.inspection.losses[].message | minLength=1 |
Showing 32 of 55 constraints. Use describe() or the machine-readable reference for the complete schema.
Invoke
const input = await fetch("https://runstamp.com/demo-evidence/operation-evidence/forms/pdf.validate.form-integrity/input.json").then((response) => response.json());
const result = await runstamp.run("pdf.validate.form-integrity", input);
if (!result.ok) throw new Error(`${result.error.code}: ${result.error.remediation}`);
console.log(result.value, result.losses, result.diagnostics, result.receipt);curl -fsS https://runstamp.com/demo-evidence/operation-evidence/forms/pdf.validate.form-integrity/input.json -o input.json
npx -p @runstamp/sdk runstamp ops invoke pdf.validate.form-integrity --input input.json{
"tool": "runstamp_invoke_operation",
"arguments": {
"operation": "pdf.validate.form-integrity",
"input": "<JSON from https://runstamp.com/demo-evidence/operation-evidence/forms/pdf.validate.form-integrity/input.json>",
"execution_mode": "local"
}
}Errors and losses
Declared errors (27)
pdf/A03_BINDING_MISMATCHpdf/ABORTEDpdf/ACTIVE_ACTIONpdf/BINDING_MISMATCHpdf/DUPLICATE_FIELD_NAMEpdf/FIELD_UNKNOWNpdf/FIELD_UNSUPPORTEDpdf/FLATTEN_FAILEDpdf/FORM_INVALIDpdf/INVALID_INPUTpdf/INVALID_VALUEpdf/MALFORMED_APPEARANCEpdf/MALFORMED_WIDGETpdf/OUTPUT_HASH_MISMATCHpdf/POST_MUTATION_CHECK_FAILEDpdf/PROTECTED_FORMpdf/RESOURCE_LIMITpdf/SIGNED_INPUTpdf/SIGNING_PROVIDER_REQUIREDpdf/TIMEOUTpdf/WIDGET_COUNT_MISMATCHpdf/SCHEMA_REJECTEDcommon/SCHEMA_REJECTEDcommon/OPERATION_CANCELLEDcommon/OPERATION_TIMEOUTcommon/CONTRACT_VIOLATIONpdf/LOSS_POLICY_VIOLATED
Declared losses (2)
pdf/FORM_INTERACTIVITY_REMOVEDpdf/FORM_APPEARANCE_DEFERRED
SDK AbortSignal, CLI exit 130, and MCP cancellation return the typed common/OPERATION_CANCELLED failure envelope.
Verified example and exact contract
- Fixture:
icp-workflow(Filled employee onboarding form and its receipt). - Example input — SHA-256
d29c39f6dc55effdd022d8eb4ec84051f48fc93e159ee655dd5d42347828ccbf. - Example result — SHA-256
fd0798f660aa009a59a7d9b4a83f992362c4c32e3809e1996b715f0228bc060c. - Verified result SHA-256:
bcfe2121b19c11d3b2519469de5b01796c4a3dffe353935e9fbc9314b7a76aac. - Qualification lane:
12-approval-forms-review.
Contract fingerprints
- Descriptor:
5077296622c560358673d72be89aece0a05e9cb43cb1ac9de2c2ae43947b455d. - Input schema:
42aa6ffd2152f028c4013dd78185422b19ad632e41b951d5f7c03cbff46e7987. - Options schema:
9dd4bd56fa7bc0096ce42bab09c74e556e9a846d43777c94fe86098440e39f12. - Result value schema:
53034991f5cba18453fc9fe4b203c569d2131fb6b32ca26a4e9c8218239ceb49.
The machine-readable operation reference publishes the complete schemas, qualification results, and evidence bindings for every operation.