Slip's QR Code Verification API Documentation
Complete reference for integrating Thai bank slip QR code verification services
Overview
The Slip's QR Code Verification API allows you to verify QR codes from Thai bank transfer slips generated by internet banking applications. Our secure verification service validates the authenticity of payment slips and automatically deducts balance from user accounts upon successful verification.
Fast Processing
Quick Thai bank slip QR code verification with 10-second timeout
Secure Authentication
API key-based authentication with user validation
Credit System
Pay-per-slip verification with automatic balance deduction
Authentication
All API requests require authentication using your API key in the request headers.
Required Headers
| Header | Type | Required | Description |
|---|---|---|---|
x-api-key |
string | Yes | User's API key for authentication and identification |
Content-Type |
string | Yes | Must be application/json |
API Endpoint
/api/v1/verify
Verifies a Thai bank slip QR code by processing it through the configured domain endpoint and deducts balance from the user account upon successful verification.
Request Format
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
qrcode |
string | Yes | The QR code data/string from Thai bank slip to be verified |
{
"qrcode": "0002010102115302TH5416Bank_Slip_QR_Data6204ABCD62070503***631041F4"
}
Response Format
Success Response
Status Code: 200 OK
{
"status": "success",
"data": {
"amount": 100.38,
"dateTime": "2025-10-05T22:09:59+07:00",
"timestamp": 1759676999,
"transactionId": "015278220959BPP13419",
"senderBankAccountNumber": "xxxxx1234x",
"senderName": "นาย สมชาย ใจดี",
"senderNameEN": "MR. Somchai Jaidee",
"senderBank": "KBANK",
"senderBankCode": "004",
"receiverBankAccountNumber": "xxxxxxxxx5678",
"receiverName": "บริษัท ร้านค้าตัวอย่าง จำกัด",
"receiverNameEN": "SAMPLE STORE COMPANY LTD",
"receiverBank": "KTB",
"receiverBankCode": "006",
"receiverPromptpay": "xxxxxxxxx5678",
"receiverProxyType": "NATID",
"rawData": {
"amount": "100.38",
"transTime": "22:09:59",
"receiver": {
"proxy": {
"type": "NATID",
"value": "x-xxxx-xxxx5-67-8"
},
"displayName": "บริษัท ร้านค้าตัวอย่าง จำกัด",
"name": "SAMPLE STORE COMPANY LTD",
"account": ""
},
"sender": {
"proxy": "",
"displayName": "นาย สมชาย ใจดี",
"name": "MR. Somchai Jaidee",
"account": {
"type": "BANKAC",
"value": "xxx-x-x1234-x"
}
},
"transRef": "015278220959BPP13419",
"countryCode": "TH",
"sendingBank": "004",
"receivingBank": "006",
"transDate": "20251005"
}
},
"message": "Bank slip QR code verified successfully",
"qrcode": "0041000600000101030040220015278220959BPP134195102TH9104B31B"
}
Response Fields
| Field | Type | Description |
|---|---|---|
amount |
number | Transaction amount |
dateTime |
string | ISO 8601 formatted date and time with timezone |
transactionId |
string | Unique transaction identifier |
senderName |
string | Sender's name in local language |
receiverName |
string | Receiver's name in local language |
Error Handling
Missing API Key
{
"status": "error",
"code": 1020,
"message": "api key is missing"
}
Invalid API Key
{
"status": "error",
"code": 1021,
"message": "invalid api key"
}
User Not Found
{
"status": "error",
"code": 1022,
"message": "user not found"
}
Insufficient Balance
{
"status": "error",
"code": 1023,
"message": "insufficient fund"
}
Usage Examples
curl -X POST https://api.example.com/api/v1/verify \
-H "Content-Type: application/json" \
-H "x-api-key: your_actual_api_key" \
-d '{
"qrcode": "your_qr_code_data"
}'
const response = await fetch('https://api.example.com/api/v1/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'your_actual_api_key'
},
body: JSON.stringify({
qrcode: 'your_qr_code_data'
})
});
const result = await response.json();
console.log(result);
import requests
url = "https://api.example.com/api/v1/verify"
headers = {
"Content-Type": "application/json",
"x-api-key": "your_actual_api_key"
}
data = {
"qrcode": "your_qr_code_data"
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result)
<?php
$url = 'https://api.example.com/api/v1/verify';
$data = json_encode(['qrcode' => 'your_qr_code_data']);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'x-api-key: your_actual_api_key'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
print_r($result);
?>
System Behavior
Transaction Logging
- Successful verifications stored as VerifyTransaction
- Failed requests stored as RequestError
Timeout Handling
Requests have a 10-second timeout. If external service doesn't respond within this time, an error response is returned
Credit System
- Each successful verification consumes 1 credit
- Failed verifications do not consume credits
- Ensure sufficient balance before making requests