Skip to content

POST /verify/truewallet

Verify a TrueMoney Wallet transfer slip by uploading an image.

Endpoint

http
POST /verify/truewallet

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

v1 Only

TrueMoney Wallet verification is only available in API v1.

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
Supported formatsJPEG, PNG, GIF, WebP
QR code visibilityMust be clearly visible

Type Definitions

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

// Response
interface VerifyTrueMoneyResponse {
  status: 200;
  data: TrueMoneySlipData;
}

interface TrueMoneySlipData {
  transactionId: string;
  date: string;              // ISO 8601
  amount: number;
  sender: {
    name: string;
  };
  receiver: {
    name: string;
    phone: string;           // Masked phone number
  };
}

// Error Response
interface ErrorResponse {
  status: number;
  message: string;
  data?: TrueMoneySlipData;  // Included when duplicate_slip
}

Examples

bash
curl -X POST https://developer.easyslip.com/api/v1/verify/truewallet \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@/path/to/truemoney-slip.jpg" \
  -F "checkDuplicate=true"
javascript
const verifyTrueMoney = 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/truewallet',
    {
      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
const fileInput = document.getElementById('slipFile');
fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0];
  const slip = await verifyTrueMoney(file, true);
  console.log('Transaction ID:', slip.transactionId);
  console.log('Amount:', slip.amount);
});
php
function verifyTrueMoney(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/truewallet',
        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 = verifyTrueMoney('/path/to/truemoney-slip.jpg', true);
echo "Transaction ID: " . $slip['transactionId'];
echo "Amount: " . $slip['amount'];
python
import requests
import os

def verify_truemoney(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/truewallet',
            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_truemoney('./truemoney-slip.jpg', check_duplicate=True)
print(f"Transaction ID: {slip['transactionId']}")
print(f"Amount: {slip['amount']}")

Response

Success (200)

json
{
  "status": 200,
  "data": {
    "transactionId": "1234567890123456",
    "date": "2024-01-15T14:30:00+07:00",
    "amount": 500.00,
    "sender": {
      "name": "นาย ผู้โอน ทดสอบ"
    },
    "receiver": {
      "name": "นาย รับเงิน ทดสอบ",
      "phone": "08x-xxx-xx89"
    }
  }
}

Response Fields

FieldTypeDescription
transactionIdstringTrueMoney transaction ID
datestringTransaction timestamp (ISO 8601)
amountnumberTransfer amount
sender.namestringSender name
receiver.namestringReceiver name
receiver.phonestringReceiver phone number (masked)

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"
}

Duplicate Slip (400)

json
{
  "status": 400,
  "message": "duplicate_slip",
  "data": { ... }
}

Notes

  • Ensure the QR code is clearly visible
  • Quota is consumed for each verification request
  • Duplicate slips from same service don't consume quota
  • TrueMoney transfers typically have shorter validity periods

Bank Slip Verification API for Thai Banking