Zuva OCR API
Asynchronously run optical character recognition on uploaded documents, returning extracted text, per-page PNG images, eOCR documents, and layout protobuf data with scan quality metrics.
Asynchronously run optical character recognition on uploaded documents, returning extracted text, per-page PNG images, eOCR documents, and layout protobuf data with scan quality metrics.
openapi: 3.0.1
info:
title: Zuva DocAI API
description: >-
The Zuva DocAI API is a RESTful contract and document AI API for extracting
structured data from unstructured documents. It provides asynchronous file
submission, OCR, field extraction across 1,400+ pre-built fields, multi-level
document classification across 220+ document types, language detection, and a
searchable fields catalog. All requests are authenticated with a Bearer API
token and served from regional hosts (US and EU).
termsOfService: https://zuva.ai/terms/zuva/
contact:
name: Zuva Support
url: https://zuva.ai/
version: '2.0'
servers:
- url: https://{region}.app.zuva.ai/api/v2
description: Zuva DocAI regional API server
variables:
region:
default: us
description: Deployment region for the Zuva DocAI API.
enum:
- us
- eu
security:
- bearerAuth: []
tags:
- name: Files
description: Upload and manage document files.
- name: Field Extraction
description: Extract field values from documents.
- name: Classification
description: Multi-level document classification.
- name: OCR
description: Optical character recognition.
- name: Fields
description: Field catalog management.
paths:
/files:
post:
operationId: createFile
tags:
- Files
summary: Upload a document file.
description: >-
Upload the binary content of a document to Zuva. Returns a file_id used
by the OCR, extraction, and classification services.
requestBody:
required: true
content:
application/octet-stream:
schema:
type: string
format: binary
responses:
'201':
description: File created.
content:
application/json:
schema:
$ref: '#/components/schemas/File'
delete:
operationId: deleteFiles
tags:
- Files
summary: Delete multiple files.
description: Delete multiple uploaded files by their file IDs.
parameters:
- name: file_ids
in: query
required: true
description: Comma-separated list of file IDs to delete.
schema:
type: string
responses:
'204':
description: Files deleted.
/files/{file_id}:
delete:
operationId: deleteFile
tags:
- Files
summary: Delete a single file.
parameters:
- $ref: '#/components/parameters/FileId'
responses:
'204':
description: File deleted.
/files/{file_id}/expiration:
put:
operationId: updateFileExpiration
tags:
- Files
summary: Update a file's expiration.
description: Update the retention period (expiration) of an uploaded file.
parameters:
- $ref: '#/components/parameters/FileId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
expiration:
type: string
format: date-time
description: New expiration timestamp for the file.
responses:
'200':
description: Expiration updated.
content:
application/json:
schema:
$ref: '#/components/schemas/File'
/extraction:
post:
operationId: createExtraction
tags:
- Field Extraction
summary: Create field extraction requests.
description: >-
Submit one or more files and field IDs to extract. Accepts up to 100
file IDs and 100 field IDs per request. Returns one request per file.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExtractionRequest'
responses:
'202':
description: Extraction requests accepted and queued.
content:
application/json:
schema:
type: object
properties:
file_ids:
type: array
items:
type: string
field_ids:
type: array
items:
type: string
status:
type: string
/extractions:
get:
operationId: getExtractions
tags:
- Field Extraction
summary: Query multiple extraction requests.
parameters:
- name: request_id
in: query
required: false
description: Comma-separated list of extraction request IDs.
schema:
type: string
responses:
'200':
description: Extraction request statuses.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Request'
/extraction/{request_id}:
get:
operationId: getExtraction
tags:
- Field Extraction
summary: Retrieve an extraction request status.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Extraction request status.
content:
application/json:
schema:
$ref: '#/components/schemas/Request'
/extraction/{request_id}/results/text:
get:
operationId: getExtractionResultsText
tags:
- Field Extraction
summary: Retrieve extraction text results.
description: Fetch extracted field values with text spans and locations.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Extraction results.
content:
application/json:
schema:
$ref: '#/components/schemas/ExtractionResults'
/mlc:
post:
operationId: createClassification
tags:
- Classification
summary: Create a document classification request.
description: >-
Submit files to the multi-level classification (MLC) service, which
classifies documents across 220+ document types and returns the
document language and amendment status.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- file_ids
properties:
file_ids:
type: array
items:
type: string
responses:
'202':
description: Classification requests accepted and queued.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ClassificationResult'
/mlcs:
get:
operationId: getClassifications
tags:
- Classification
summary: Query multiple classification requests.
parameters:
- name: request_id
in: query
required: false
description: Comma-separated list of classification request IDs.
schema:
type: string
responses:
'200':
description: Classification request statuses.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ClassificationResult'
/mlc/{request_id}:
get:
operationId: getClassification
tags:
- Classification
summary: Retrieve classification status and results.
description: >-
Retrieve the classification result for a request, including the
document type, detected language, and whether the document is an
amendment.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Classification result.
content:
application/json:
schema:
$ref: '#/components/schemas/ClassificationResult'
/ocr:
post:
operationId: createOcr
tags:
- OCR
summary: Create an OCR request.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- file_ids
properties:
file_ids:
type: array
items:
type: string
responses:
'202':
description: OCR requests accepted and queued.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/OcrResult'
/ocrs:
get:
operationId: getOcrs
tags:
- OCR
summary: Query multiple OCR requests.
parameters:
- name: request_id
in: query
required: false
description: Comma-separated list of OCR request IDs.
schema:
type: string
responses:
'200':
description: OCR request statuses.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/OcrResult'
/ocr/{request_id}:
get:
operationId: getOcr
tags:
- OCR
summary: Retrieve an OCR request status.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: OCR request status.
content:
application/json:
schema:
$ref: '#/components/schemas/OcrResult'
/ocr/{request_id}/text:
get:
operationId: getOcrText
tags:
- OCR
summary: Retrieve OCR extracted text.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Extracted text.
content:
text/plain:
schema:
type: string
/ocr/{request_id}/images:
get:
operationId: getOcrImages
tags:
- OCR
summary: Download all page images as a zip.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Zip archive of page PNG images.
content:
application/zip:
schema:
type: string
format: binary
/ocr/{request_id}/images/{page_number}:
get:
operationId: getOcrImagePage
tags:
- OCR
summary: Download a single page image.
parameters:
- $ref: '#/components/parameters/RequestId'
- name: page_number
in: path
required: true
schema:
type: integer
responses:
'200':
description: PNG image of the requested page.
content:
image/png:
schema:
type: string
format: binary
/ocr/{request_id}/layouts:
get:
operationId: getOcrLayouts
tags:
- OCR
summary: Retrieve layout protobuf binary.
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: Layout protobuf binary.
content:
application/octet-stream:
schema:
type: string
format: binary
/fields:
get:
operationId: getFields
tags:
- Fields
summary: List available fields.
description: List all available extraction fields with their metadata.
responses:
'200':
description: List of fields.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Field'
post:
operationId: createField
tags:
- Fields
summary: Create a custom extraction field.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
field_name:
type: string
description:
type: string
responses:
'201':
description: Field created.
content:
application/json:
schema:
$ref: '#/components/schemas/Field'
/fields/{field_id}/metadata:
get:
operationId: getFieldMetadata
tags:
- Fields
summary: Retrieve field metadata.
parameters:
- $ref: '#/components/parameters/FieldId'
responses:
'200':
description: Field metadata.
content:
application/json:
schema:
$ref: '#/components/schemas/Field'
put:
operationId: updateFieldMetadata
tags:
- Fields
summary: Update field metadata.
description: Update a field's name and description.
parameters:
- $ref: '#/components/parameters/FieldId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
field_name:
type: string
description:
type: string
responses:
'200':
description: Field metadata updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Field'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Zuva API token passed in the Authorization header as
`Authorization: Bearer <token>`.
parameters:
FileId:
name: file_id
in: path
required: true
description: The unique identifier of an uploaded file.
schema:
type: string
RequestId:
name: request_id
in: path
required: true
description: The unique identifier of an asynchronous request.
schema:
type: string
FieldId:
name: field_id
in: path
required: true
description: The unique identifier of a field.
schema:
type: string
schemas:
File:
type: object
properties:
file_id:
type: string
expiration:
type: string
format: date-time
attributes:
type: array
items:
type: string
size:
type: integer
permissions:
type: array
items:
type: string
ExtractionRequest:
type: object
required:
- file_ids
- field_ids
properties:
file_ids:
type: array
description: Up to 100 file IDs.
items:
type: string
field_ids:
type: array
description: Up to 100 field IDs.
items:
type: string
options:
type: object
properties:
field_heuristics:
type: array
items:
type: object
Request:
type: object
properties:
request_id:
type: string
file_id:
type: string
field_ids:
type: array
items:
type: string
status:
type: string
enum:
- queued
- processing
- complete
- failed
ExtractionResults:
type: object
properties:
request_id:
type: string
file_id:
type: string
results:
type: array
items:
type: object
properties:
field_id:
type: string
text:
type: string
spans:
type: array
items:
type: object
properties:
start:
type: integer
end:
type: integer
ClassificationResult:
type: object
properties:
request_id:
type: string
file_id:
type: string
status:
type: string
classification:
type: string
language:
type: string
is_amendment:
type: boolean
OcrResult:
type: object
properties:
request_id:
type: string
file_id:
type: string
status:
type: string
page_count:
type: integer
character_count:
type: integer
scan_quality:
type: string
scan_score:
type: number
Field:
type: object
properties:
field_id:
type: string
name:
type: string
description:
type: string
bias:
type: number
f_score:
type: number
precision:
type: number
recall:
type: number
is_custom:
type: boolean