Skip to content

POST /verify (Image)

Verify a bank slip by uploading an image file.

Endpoint

http
POST /verify

Full URL: https://developer.easyslip.com/api/v1/verify

Authentication

Required. See Authentication Guide.

http
Authorization: Bearer YOUR_API_KEY
Content-Type: multipart/form-data

Request

Form Data

ParameterTypeRequiredDescription
fileFileYesSlip image file
checkDuplicatebooleanNoCheck for duplicate slip

Image Requirements

RequirementValue
Maximum size4 MB (4,194,304 bytes)
Supported formatsJPEG, PNG, GIF, WebP
QR code visibilityMust be clear and readable

Type Definitions

typescript
// Request (multipart/form-data)
interface VerifyByImageRequest {
  file: File;               // Image file
  checkDuplicate?: boolean;
}

// Response
interface VerifyResponse {
  status: 200;
  data: SlipData;
}

// See GET /verify for full SlipData type definition

// Error Response
interface ErrorResponse {
  status: number;
  message: string;
}

Examples

bash
curl -X POST https://developer.easyslip.com/api/v1/verify \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@/path/to/slip.jpg" \
  -F "checkDuplicate=true"
javascript
const verifyByImage = async (file, checkDuplicate = false) => {
  const formData = new FormData();
  formData.append('file', file);
  formData.append('checkDuplicate', String(checkDuplicate));

  const response = await fetch('https://developer.easyslip.com/api/v1/verify', {
    method: 'POST',
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
    body: formData
  });

  const result = await response.json();

  if (result.status !== 200) {
    throw new Error(result.message);
  }

  return result.data;
};

// Usage with file input
const fileInput = document.getElementById('slipFile');
fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  const slip = await verifyByImage(file, true);
  console.log('Amount:', slip.amount.amount);
});
php
function verifyByImage(string $filePath, bool $checkDuplicate = false): array
{
    $apiKey = getenv('EASYSLIP_API_KEY');

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => 'https://developer.easyslip.com/api/v1/verify',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
        CURLOPT_POSTFIELDS => [
            'file' => new CURLFile($filePath),
            'checkDuplicate' => $checkDuplicate ? 'true' : 'false'
        ]
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    $result = json_decode($response, true);

    if ($result['status'] !== 200) {
        throw new Exception($result['message']);
    }

    return $result['data'];
}

// Usage
$slip = verifyByImage('/path/to/slip.jpg', true);
echo "Amount: " . $slip['amount']['amount'];
python
import requests
import os

def verify_by_image(file_path: str, check_duplicate: bool = False) -> dict:
    with open(file_path, 'rb') as f:
        response = requests.post(
            'https://developer.easyslip.com/api/v1/verify',
            headers={'Authorization': f'Bearer {os.environ["EASYSLIP_API_KEY"]}'},
            files={'file': f},
            data={'checkDuplicate': 'true' if check_duplicate else 'false'}
        )

    result = response.json()

    if result['status'] != 200:
        raise Exception(result['message'])

    return result['data']

# Usage
slip = verify_by_image('./slip.jpg', check_duplicate=True)
print(f"Amount: {slip['amount']['amount']}")

Response

Success (200)

json
{
  "status": 200,
  "data": {
    "payload": "00000000000000000000000000000000000000000000000",
    "transRef": "68370160657749I376388B35",
    "date": "2024-01-15T14:30:00+07:00",
    "amount": {
      "amount": 1500.00
    },
    "sender": {
      "bank": { "id": "004", "name": "กสิกรไทย", "short": "KBANK" },
      "account": { "name": { "th": "นาย ผู้โอน ทดสอบ" } }
    },
    "receiver": {
      "bank": { "id": "014", "name": "ไทยพาณิชย์", "short": "SCB" },
      "account": { "name": { "th": "นาย รับเงิน ทดสอบ" } }
    }
  }
}

Error Responses

Invalid Image (400)

json
{
  "status": 400,
  "message": "invalid_image"
}

Image Size Too Large (400)

json
{
  "status": 400,
  "message": "image_size_too_large"
}

QR Code Not Found (404)

json
{
  "status": 404,
  "message": "qrcode_not_found"
}

Slip Not Found (404)

json
{
  "status": 404,
  "message": "slip_not_found"
}

Notes

  • Ensure the QR code is clearly visible and not blurry
  • Crop the image to focus on the QR code area for faster processing
  • Compress large images before uploading

Bank Slip Verification API for Thai Banking