This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /guides/dws-processor/tools-and-api/import-instant-json-api.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. Import Instant JSON API

Use the import Instant JSON API to apply Instant JSON data to a PDF. Instant JSON is Nutrient’s JSON format for representing PDF annotations, form field values, attachments, and related document records.

The /build endpoint handles Instant JSON import. Add the source PDF as a parts item, and add an applyInstantJson action that references the Instant JSON file.

For signup, pricing, and task-level examples, refer to the Instant JSON import API task page.

Import Instant JSON

The following example imports Instant JSON from annotations.json into document.pdf and writes the output to result.pdf:

curl -X POST https://api.nutrient.io/build \
-H "Authorization: Bearer your_api_key_here" \
-o result.pdf \
--fail \
-F document=@annotations.pdf \
-F annotations.json=@annotations.json \
-F instructions='{
"parts": [
{
"file": "document"
}
],
"actions": [
{
"type": "applyInstantJson",
"file": "annotations.json"
}
]
}'

Import Instant JSON from URLs

For remotely hosted source files, send a JSON request and pass URLs for both the PDF and the Instant JSON file. Use this instructions object:

{
"parts": [
{
"file": {
"url": "https://example.com/document.pdf"
}
}
],
"actions": [
{
"type": "applyInstantJson",
"file": {
"url": "https://example.com/annotations.json"
}
}
]
}

Shell

Run this request to import Instant JSON from URLs:

Terminal window
curl -X POST https://api.nutrient.io/build \
-H "Authorization: Bearer $NUTRIENT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"parts": [
{
"file": {
"url": "https://example.com/document.pdf"
}
}
],
"actions": [
{
"type": "applyInstantJson",
"file": {
"url": "https://example.com/annotations.json"
}
}
]
}' \
-o result.pdf

Import annotations

Instant JSON can contain annotations, such as highlights, notes, ink annotations, stamps, and image annotations.

The following example imports one note annotation:

{
"annotations": [
{
"type": "pspdfkit/note",
"v": 2,
"id": "01J0EXAMPLEANNOTATIONID0001",
"pageIndex": 0,
"bbox": [100, 100, 32, 32],
"contents": "Review this section",
"createdAt": "2026-06-29T00:00:00Z",
"updatedAt": "2026-06-29T00:00:00Z"
}
],
"format": "https://pspdfkit.com/instant-json/v1"
}

Use the exact annotation data exported from Nutrient SDKs or another system that produces compatible Instant JSON.

Fill form fields with Instant JSON

Instant JSON can also set PDF form field values. Add a formFieldValues array and reference form fields by their field names.

Use this Instant JSON structure to fill form fields:

{
"formFieldValues": [
{
"name": "First Name",
"type": "pspdfkit/form-field-value",
"v": 1,
"value": "John"
},
{
"name": "Last Name",
"type": "pspdfkit/form-field-value",
"v": 1,
"value": "Appleseed"
},
{
"name": "Newsletter",
"type": "pspdfkit/form-field-value",
"v": 1,
"value": "Choice1"
}
],
"format": "https://pspdfkit.com/instant-json/v1"
}

The field name must match the form field name in the PDF, not only the visible label next to the field. For form-specific examples, refer to the PDF form filling API guide.

Import image attachments

Some Instant JSON annotations reference attachments, such as image annotations or visual signature appearances. Include attachments in the attachments object, and reference them by ID from the annotation.

Use this Instant JSON structure to import an image attachment:

{
"annotations": [
{
"type": "pspdfkit/image",
"v": 2,
"id": "01J0EXAMPLEIMAGEANNOTATION1",
"pageIndex": 0,
"bbox": [72, 700, 200, 48],
"contentType": "image/png",
"imageAttachmentId": "signature-image",
"isSignature": true
}
],
"attachments": {
"signature-image": {
"binary": "<base64-encoded-png>",
"contentType": "image/png"
}
},
"format": "https://pspdfkit.com/instant-json/v1"
}

A visual signature appearance imported this way differs from a cryptographic digital signature. To cryptographically sign a PDF, use the Processor API digital signature endpoint. For digital signing workflows, refer to the PDF digital signature API guide.

Import and flatten Instant JSON

If the imported annotations or form appearances should no longer be editable, add a flatten action after applyInstantJson. Actions run in the order specified in the actions array.

Use this instructions object to import and flatten Instant JSON:

{
"parts": [
{
"file": "document"
}
],
"actions": [
{
"type": "applyInstantJson",
"file": "annotations.json"
},
{
"type": "flatten"
}
]
}

Flattening turns annotations and form appearances into regular page content. Use it only when the output no longer needs editable annotations or form fields.

Import Instant JSON into selected pages

The applyInstantJson action applies to the assembled PDF in the request. If you first extract pages with parts[].pages, Nutrient DWS Processor API applies the Instant JSON to that extracted output.

Use this instructions object to import Instant JSON into selected pages:

{
"parts": [
{
"file": "document",
"pages": {
"start": 0,
"end": 2
}
}
],
"actions": [
{
"type": "applyInstantJson",
"file": "annotations.json"
}
]
}

Make sure page indexes, bounding boxes, and form field names in the Instant JSON match the PDF that the action applies to.

Import Instant JSON into password-protected PDFs

If the source PDF is password-protected, include the password on the part. Use this instructions object:

{
"parts": [
{
"file": "protected_document",
"password": "document-password"
}
],
"actions": [
{
"type": "applyInstantJson",
"file": "annotations.json"
}
]
}

Nutrient DWS Processor API uses the password only to open the source document for processing. To set a password on the output PDF, configure output.user_password, output.owner_password, and output.user_permissions.

Combine Instant JSON import with other actions

The /build endpoint can import Instant JSON and then apply additional actions. For example, you can import annotations, add a watermark, and then flatten the final output.

Use this instructions object to combine Instant JSON import with other actions:

{
"parts": [
{
"file": "document"
}
],
"actions": [
{
"type": "applyInstantJson",
"file": "annotations.json"
},
{
"type": "watermark",
"text": "REVIEWED",
"width": "50%",
"height": "20%",
"opacity": 0.3,
"rotation": 45
},
{
"type": "flatten"
}
]
}

For workflows that include cryptographic signing, import and optionally flatten Instant JSON before signing the final PDF.

Reference

An Instant JSON import request uses the Build API actions array with an applyInstantJson action:

type ApplyInstantJsonAction = {
type: "applyInstantJson",
// Multipart field name, or a remote URL object pointing to an Instant JSON file.
file: string | { url: string },
};
type InstantJson = {
annotations?: object[],
formFieldValues?: object[],
attachments?: Record<string, object>,
format: "https://pspdfkit.com/instant-json/v1",
};
type FilePart = {
// Multipart field name, or a remote URL object.
file: string | { url: string },
// Optional password for encrypted input PDFs.
password?: string,
// Optional page range to use before Instant JSON import.
pages?: {
start?: number,
end?: number,
},
};
type BuildInstructions = {
parts: FilePart[],
actions: ApplyInstantJsonAction[],
output?: {
type?: "pdf",
},
};
  • Refer to the build document endpoint API reference to import Instant JSON and combine import with flattening, watermarking, security, or other document actions.