ACORD 25 is the standard certificate of liability insurance in the US. Agencies issue hundreds daily, pulling data from policy declarations pages. This cookbook extracts declarations data and maps it to ACORD 25 fields.Documentation Index
Fetch the complete documentation index at: https://docs.reducto.ai/llms.txt
Use this file to discover all available pages before exploring further.
Sample Documents
ACORD 25 Certificate
This is a blank ACORD 25 Certificate of Liability Insurance. We’ll extract data from a declarations page and use it to fill this form.
View the sample form: ACORD 25 Certificate of Liability Insurance (PDF)
Declarations Page (Source Data)
The declarations page contains all policy details: insured name, policy numbers, effective dates, and coverage limits. This is the source data we’ll extract.Create API Key
Open Studio
Go to studio.reducto.ai and sign in. From the home page, click API Keys in the left sidebar.

View API Keys
The API Keys page shows your existing keys. Click + Create new API key in the top right corner.

Configure Key
In the modal, enter a name for your key and set an expiration policy (or select “Never” for no expiration). Click Create.

Part 1: Extract from Declarations Page
The declarations page contains all the policy details needed to fill an ACORD 25: insured name, policy number, effective/expiration dates, and coverage limits.Studio Walkthrough
Upload Declarations PDF
Go to studio.reducto.ai and create an Extract pipeline. Upload the declarations page PDF.Extract reads the document and lets you define a schema to pull specific fields as structured JSON.
Build the Schema
In the Schema Builder, define fields matching the declarations page structure. Click Add Field for each:
Field descriptions help the LLM locate the right values. Be specific about where each field appears. See the Complete Schema below for a copy-paste version.
policy_number(text) - “Policy number from the declarations page”named_insured(object) - “Policyholder information”name(text) - “Insured name”address(text) - “Mailing address”
effective_date(text) - “Policy effective date”expiration_date(text) - “Policy expiration date”insurer_name(text) - “Insurance company name”umbrella_occurrence_limit(number) - “Each occurrence limit”umbrella_aggregate_limit(number) - “Aggregate limit”

Using the API
Let’s walk through extracting policy data step by step.Step 1: Initialize the client
Start by importing Reducto and creating a client. The client reads your API key from theREDUCTO_API_KEY environment variable automatically.
Step 2: Upload your document
Upload the declarations page PDF. This returns afile_id that you’ll use for extraction. Reducto stores the file temporarily so you can process it without re-uploading.
Step 3: Define the schema structure
The schema tells Reducto what fields to extract. Start with the basic structure:Step 4: Add simple fields
Add the basic policy fields. Each field needs atype and a description. The description is important because it tells the LLM where to find the value.
Step 5: Add nested objects
For grouped information like the insured’s details, use a nested object:Step 6: Add coverage limits
For numeric values like coverage limits, usetype: "number". Reducto will return these as integers or floats, not strings.
Complete Schema
Here’s the complete schema you can copy and paste:Step 7: Run the extraction
Pass your schema to the Extract API using theinstructions parameter:
instructions parameter wraps your schema. This structure allows for additional options like system prompts.
Step 8: Access the results
The extracted data is inresult.result[0] (the API returns an array for multi-document support). Each field from your schema becomes a key in the response:
Part 2: Fill ACORD 25 Certificate
Use the extracted policy data to fill a blank ACORD 25 certificate. The Edit API detects form fields and fills them based on natural language instructions.Studio Walkthrough
Upload Blank ACORD 25
Create an Edit pipeline in Studio. Upload a blank ACORD 25 PDF.Edit detects all fillable fields in the form: text boxes, checkboxes, and dropdowns.
Write Fill Instructions
In the Edit Instructions panel, describe what values to fill. Reference the data you extracted:Be explicit about field locations when the form has similar fields (e.g., multiple policy number boxes).
Using the API
Now let’s fill the ACORD 25 with the extracted data.Step 1: Upload the blank form
Upload the blank ACORD 25 PDF. Edit uses the same upload mechanism as Extract.Edit uses
document_url instead of input. This is because Edit modifies documents rather than reading them.Step 2: Write fill instructions
Edit uses natural language instructions instead of a schema. Describe what values should go where. Reference the section names on the form to help Edit find the right fields.topmostSubform[0].Page1[0].f1_1[0]. Edit uses AI to understand context, so “Insured Name” works even if the PDF field is named something obscure.
Step 3: Run the Edit API
Pass your instructions to the Edit API:- Detects all fillable fields in the PDF
- Reads surrounding context (labels, headers) to understand each field
- Maps your instructions to the appropriate fields
- Fills the values and returns the modified document
Step 4: Download the result
The response includes a URL to download the filled form:Complete Workflow
The full pipeline extracts data from a declarations page and fills an ACORD 25:Tips
Handling checkboxes
ACORD 25 has multiple checkbox fields (policy types, coverage indicators). Be explicit in your instructions:Form schema for production
For high-volume certificate generation, save theform_schema from your first Edit response. This skips field detection on subsequent calls.
Next Steps
Edit API Overview
Full Edit API documentation
Form Schema
Pre-define field locations for faster fills
Extract API
Structured data extraction
Batch Processing
Process many certificates at scale


