Paddle Ocr API Documentation

Paddle Ocr API Documentation

Playground

Try it on WaveSpeedAI!

PaddleOCR-VL is an ultra-compact 0.9B parameter vision-language model for document parsing, supporting 109 languages with text, table, formula, and chart recognition in JSON or Markdown output. Ready-to-use REST inference API, best performance, no cold starts, affordable pricing.

Features

Extract text from images with WaveSpeedAI PaddleOCR — a fast, accurate optical character recognition model. Simply upload an image and get clean, structured text output in JSON or Markdown format. Perfect for document digitization, data extraction, and text recognition tasks.

Why It Works Great

  • High accuracy: Powered by PaddleOCR for reliable text recognition.
  • Multi-language support: Recognizes text in multiple languages.
  • Flexible output: Choose between JSON or Markdown format.
  • Document-friendly: Handles scanned documents, screenshots, and photos.
  • Ultra-affordable: Just $0.005 per image.
  • Fast processing: Quick turnaround for high-volume workflows.

Parameters

ParameterRequiredDescription
imageYesImage containing text (upload or public URL).
output_formatNoOutput format: json or markdown. Default: markdown.

How to Use

  1. Upload your image — drag and drop or paste a public URL.
  2. Choose output format — select JSON for structured data or Markdown for readable text.
  3. Run — click the button to process.
  4. Copy or download — use the extracted text as needed.

Pricing

$0.005 per image.

Output Formats

FormatDescriptionBest For
markdownClean, readable text with formattingDocuments, articles, readable output
jsonStructured data with position infoData processing, integration, automation

Best Use Cases

  • Document Digitization — Convert scanned documents to editable text.
  • Data Extraction — Pull text from invoices, receipts, and forms.
  • Screenshot Text — Extract text from screenshots and images.
  • Business Cards — Digitize contact information quickly.
  • Batch Processing — Process large volumes of documents affordably.
  • Content Migration — Convert image-based content to text format.

Supported Content Types

  • Scanned documents (PDF pages, printed text)
  • Screenshots and screen captures
  • Photos of documents and signs
  • Handwritten text (with varying accuracy)
  • Multi-column layouts
  • Tables and structured content

Pro Tips for Best Results

  • Use high-resolution images for better accuracy.
  • Ensure good contrast between text and background.
  • Straighten skewed documents before processing.
  • Use JSON format when you need text positions or bounding boxes.
  • Use Markdown format for clean, human-readable output.
  • At $0.005 per image, batch processing is extremely cost-effective.

Notes

  • If using a URL, ensure it is publicly accessible.
  • Processing time is typically under a second per image.
  • Accuracy depends on image quality and text clarity.
  • Supports multiple languages and character sets.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "output_format": "markdown"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/paddle-ocr" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-Document image to parse. Supports text, tables, formulas, and charts recognition in 109 languages.
output_formatstringNomarkdownjson, markdownOutput format: 'json' for structured data or 'markdown' for human-readable text.
enable_sync_modebooleanNofalse-If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.