POST /verify/truewallet
Verify a TrueMoney Wallet transfer slip by uploading an image.
Endpoint
http
POST /verify/truewalletFull URL: https://developer.easyslip.com/api/v1/verify/truewallet
v2 Available
TrueMoney Wallet verification is now also available in API v2 with additional features like Base64, URL input, account matching, and amount matching.
Authentication
Required. See Authentication Guide.
http
Authorization: Bearer YOUR_API_KEY
Content-Type: multipart/form-dataRequest
Form Data
| Parameter | Type | Required | Description |
|---|---|---|---|
file | File | Yes | Slip image file |
checkDuplicate | boolean | No | Check for duplicate slip |
Image Requirements
| Requirement | Value |
|---|---|
| Maximum size | 4 MB |
| Supported formats | JPEG, PNG, GIF, WebP |
| QR code visibility | Must 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
| Field | Type | Description |
|---|---|---|
transactionId | string | TrueMoney transaction ID |
date | string | Transaction timestamp (ISO 8601) |
amount | number | Transfer amount |
sender.name | string | Sender name |
receiver.name | string | Receiver name |
receiver.phone | string | Receiver 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