API Documentation

Integrate powerful OCR capabilities into your applications with our comprehensive REST API. Process receipts, invoices, and documents with ease.

🚀 Quick Start

Base URL

Production: https://receiptvision.com
Test: https://test.receiptvision.com
1. Get Your API Key

Sign up for an account and generate your API key from the dashboard.

2. Make Your First Request
curl -X POST "https://receiptvision.com/api/ocr/process" \ -H "apikey: YOUR_API_KEY" \ -F "[email protected]" \ -F "document_type=receipt"
3. Get Results

Use the returned token to retrieve your processed results:

curl -X GET "https://receiptvision.com/api/ocr/result/{token}" \ -H "apikey: YOUR_API_KEY"

🔐 Authentication

Receipt Vision OCR API uses API key authentication. Include your API key in the request header:

apikey: YOUR_API_KEY_HERE
Security: Never expose your API key in client-side code. Always make API calls from your server.

📡 API Endpoints

POST

/api/ocr/process

Process an image for OCR text extraction using form data.

Parameters
Parameter Type Required Description
file file Required Image file (JPG, PNG, PDF). Max 10MB.
document_type string Optional Type of document: "receipt", "invoice", "document". Default: "receipt"
language string Optional Language code (e.g., "en", "es", "fr"). Default: "en"
schema_code string Optional Custom schema code for structured output
decimal_places integer Optional Number of decimal places for currency values
Response
{ "token": "abc123xyz789", "status": "pending", "success": true, "code": 0, "message": "Processing started", "statusCode": 202 }
POST

/api/ocr/process-json

Process an image using JSON with base64 encoded image data.

Request Body
{ "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA...", "document_type": "receipt", "language": "en", "format": "structured" }
GET

/api/ocr/result/{token}

Retrieve OCR processing results using the token from the process endpoint.

Response
{ "processId": "abc123xyz789", "status": "completed", "success": true, "confidence": 0.98, "result": { "merchant_name": "Starbucks Coffee", "total": 15.47, "date": "2025-06-09", "items": [ { "name": "Large Coffee", "price": 4.95 } ] }, "extractedText": "...", "processedAt": "2025-06-09T10:30:00Z" }
GET

/api/ocr/requests

Get your recent OCR processing requests with pagination.

Query Parameters
Parameter Type Default Description
page integer 1 Page number (starts from 1)
pageSize integer 25 Items per page (max 100)
GET

/api/credits/balance

Get your current credit balance.

Response
{ "userId": "user123", "credits": 150, "timestamp": "2025-06-09T10:30:00Z" }

💻 Code Examples

JavaScript (Node.js)

const fs = require('fs'); const FormData = require('form-data'); const axios = require('axios'); async function processReceipt(imagePath) { const form = new FormData(); form.append('file', fs.createReadStream(imagePath)); form.append('document_type', 'receipt'); try { // Submit for processing const response = await axios.post( 'https://receiptvision.com/api/ocr/process', form, { headers: { ...form.getHeaders(), 'apikey': 'YOUR_API_KEY' } } ); const { token } = response.data; // Poll for results let result; do { await new Promise(resolve => setTimeout(resolve, 2000)); const resultResponse = await axios.get( `https://receiptvision.com/api/ocr/result/${token}`, { headers: { 'apikey': 'YOUR_API_KEY' } } ); result = resultResponse.data; } while (result.status === 'pending'); return result; } catch (error) { console.error('Error:', error.response?.data || error.message); } }

Python

import requests import time import base64 def process_receipt(image_path, api_key): base_url = "https://receiptvision.com/api/ocr" headers = {"apikey": api_key} # Submit for processing with open(image_path, 'rb') as f: files = {'file': f} data = {'document_type': 'receipt'} response = requests.post( f"{base_url}/process", files=files, data=data, headers=headers ) if not response.ok: raise Exception(f"Error: {response.text}") token = response.json()['token'] # Poll for results while True: result_response = requests.get( f"{base_url}/result/{token}", headers=headers ) result = result_response.json() if result['status'] != 'pending': return result time.sleep(2) # Usage api_key = "YOUR_API_KEY" result = process_receipt("receipt.jpg", api_key) print(result['result'])

PHP

"$baseUrl/process", CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["apikey: $apiKey"], CURLOPT_POSTFIELDS => [ 'file' => new CURLFile($imagePath), 'document_type' => 'receipt' ] ]); $response = curl_exec($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($httpCode !== 200) { throw new Exception("Error: $response"); } $data = json_decode($response, true); $token = $data['token']; // Poll for results do { sleep(2); $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "$baseUrl/result/$token", CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["apikey: $apiKey"] ]); $resultResponse = curl_exec($curl); curl_close($curl); $result = json_decode($resultResponse, true); } while ($result['status'] === 'pending'); return $result; } // Usage $apiKey = "YOUR_API_KEY"; $result = processReceipt("receipt.jpg", $apiKey); print_r($result['result']); ?>

⚠️ Error Handling

HTTP Status Codes

200 Success - Request completed successfully
202 Accepted - Request accepted for processing
400 Bad Request - Invalid request parameters
401 Unauthorized - Invalid or missing API key
500 Internal Server Error - Server-side error
Error Response Format
{ "success": false, "code": 1008, "message": "Authentication required. Please log in or provide a valid API key", "statusCode": 401 }

📚 SDKs & Libraries

JavaScript/Node.js

Official SDK for JavaScript and Node.js applications.

npm install sumomonkey-ocr
Python

Python SDK with async support and easy integration.

pip install sumomonkey-ocr
PHP

Composer package for PHP applications.

composer require sumomonkey/ocr
More Coming Soon

We're working on SDKs for Java, C#, Ruby, and Go.

Request SDK

Ready to Start Building?

Get your API key and start processing documents in minutes.

Get API Key Get Support
An unhandled error has occurred. Reload 🗙