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

POST
/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
Request Example
{
  "qrcode": "0002010102115302TH5416Bank_Slip_QR_Data6204ABCD62070503***631041F4"
}

Response Format

Success Response

Status Code: 200 OK

Success Response Example
{
  "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

1020 401 Unauthorized

Missing API Key

{
  "status": "error",
  "code": 1020,
  "message": "api key is missing"
}
1021 401 Unauthorized

Invalid API Key

{
  "status": "error",
  "code": 1021,
  "message": "invalid api key"
}
1022 400 Bad Request

User Not Found

{
  "status": "error",
  "code": 1022,
  "message": "user not found"
}
1023 400 Bad Request

Insufficient Balance

{
  "status": "error",
  "code": 1023,
  "message": "insufficient fund"
}

Usage Examples

cURL Example
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"
  }'
JavaScript (Fetch API)
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);
Python (requests)
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 (cURL)
<?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