Skip to content

POST /verify (Image) ​

Verify a bank slip by uploading an image file.

Endpoint ​

http
POST /verify

Full URL: https://api.easyslip.com/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://api.easyslip.com/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://api.easyslip.com/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://api.easyslip.com/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://api.easyslip.com/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"
}

Bangkok Bank Slip Pending (404) ​

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

Note

Bangkok Bank slips transferred within the last 5 minutes may not be verifiable yet. Please wait a moment and try again.

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