General Endpoint
curl --request POST \
--url https://api.ferofill.com/api/v1/submission/extract \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"files": [
null
]
}
'import requests
url = "https://api.ferofill.com/api/v1/submission/extract"
payload = { "files": [None] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: [null]})
};
fetch('https://api.ferofill.com/api/v1/submission/extract', 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.ferofill.com/api/v1/submission/extract",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'files' => [
null
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.ferofill.com/api/v1/submission/extract"
payload := strings.NewReader("{\n \"files\": [\n null\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.ferofill.com/api/v1/submission/extract")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n null\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ferofill.com/api/v1/submission/extract")
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["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n null\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"template_confidence": 94,
"template": "acord_127_2023",
"processing_time": "2.3s",
"start_page": 1,
"end_page": 2,
"extracted_fields": [
{
"field_name": "applicant_name",
"value": "ABC Transportation Inc",
"confidence": 98,
"location": {"page": 1, "x": 0.1, "y": 0.15, "width": 0.3, "height": 0.02},
"data_type": "text"
}
],
"tables": [
{
"table_id": "vehicle_schedule",
"title": "Schedule of Vehicles",
"confidence": 92,
"location": {"page": 2, "x": 0.05, "y": 0.2, "width": 0.9, "height": 0.6},
"structure": {
"headers": ["Vehicle ID", "Year", "Make", "Model", "VIN"],
"rows": [
{
"row_index": 0,
"cells": [
{"column": "Vehicle ID", "value": "001"},
{"column": "Year", "value": "2022"}
]
}
]
}
}
]
}
],
"error": null
}
{
"data": [],
"error": {
"message": "Unsupported file/Model overloaded/Rate limit/Unauthorized",
"status": "415/503/429/401"
}
}
API Documentation
General Endpoint
Use the general endpoint when you have multiple lines of business or want automatic document classification.
POST
/
api
/
v1
/
submission
/
extract
General Endpoint
curl --request POST \
--url https://api.ferofill.com/api/v1/submission/extract \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"files": [
null
]
}
'import requests
url = "https://api.ferofill.com/api/v1/submission/extract"
payload = { "files": [None] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({files: [null]})
};
fetch('https://api.ferofill.com/api/v1/submission/extract', 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.ferofill.com/api/v1/submission/extract",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'files' => [
null
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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.ferofill.com/api/v1/submission/extract"
payload := strings.NewReader("{\n \"files\": [\n null\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.ferofill.com/api/v1/submission/extract")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"files\": [\n null\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ferofill.com/api/v1/submission/extract")
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["Content-Type"] = 'application/json'
request.body = "{\n \"files\": [\n null\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"template_confidence": 94,
"template": "acord_127_2023",
"processing_time": "2.3s",
"start_page": 1,
"end_page": 2,
"extracted_fields": [
{
"field_name": "applicant_name",
"value": "ABC Transportation Inc",
"confidence": 98,
"location": {"page": 1, "x": 0.1, "y": 0.15, "width": 0.3, "height": 0.02},
"data_type": "text"
}
],
"tables": [
{
"table_id": "vehicle_schedule",
"title": "Schedule of Vehicles",
"confidence": 92,
"location": {"page": 2, "x": 0.05, "y": 0.2, "width": 0.9, "height": 0.6},
"structure": {
"headers": ["Vehicle ID", "Year", "Make", "Model", "VIN"],
"rows": [
{
"row_index": 0,
"cells": [
{"column": "Vehicle ID", "value": "001"},
{"column": "Year", "value": "2022"}
]
}
]
}
}
]
}
],
"error": null
}
{
"data": [],
"error": {
"message": "Unsupported file/Model overloaded/Rate limit/Unauthorized",
"status": "415/503/429/401"
}
}
Requests to the general endpoint will take longer than LOB specific extraction.
Request
file[]
required
Upload one or more documents for extraction. Supported file formats: pdf, jpeg, png, xlsx, docx, pptx, csv, and txt.
{
"data": [
{
"template_confidence": 94,
"template": "acord_127_2023",
"processing_time": "2.3s",
"start_page": 1,
"end_page": 2,
"extracted_fields": [
{
"field_name": "applicant_name",
"value": "ABC Transportation Inc",
"confidence": 98,
"location": {"page": 1, "x": 0.1, "y": 0.15, "width": 0.3, "height": 0.02},
"data_type": "text"
}
],
"tables": [
{
"table_id": "vehicle_schedule",
"title": "Schedule of Vehicles",
"confidence": 92,
"location": {"page": 2, "x": 0.05, "y": 0.2, "width": 0.9, "height": 0.6},
"structure": {
"headers": ["Vehicle ID", "Year", "Make", "Model", "VIN"],
"rows": [
{
"row_index": 0,
"cells": [
{"column": "Vehicle ID", "value": "001"},
{"column": "Year", "value": "2022"}
]
}
]
}
}
]
}
],
"error": null
}
{
"data": [],
"error": {
"message": "Unsupported file/Model overloaded/Rate limit/Unauthorized",
"status": "415/503/429/401"
}
}
Response
All endpoints return a consistent response structure:array
required
Array of extracted document data objects
Show Document Data Object
Show Document Data Object
number
Confidence score (0-100) for document template identification
string
Identified document template (e.g., “acord_127_2023”)
string
Time taken to process the document
number
First page number of the document
number
Last page number of the document
array
Array of extracted field objects with values and locations
array
Array of extracted table objects with structured data
string | null
Error message if processing failed, null if successful
⌘I