UPI PG logoUPI PGLive API: https://pay.tezzcorp.in/api/v1
Integration Documentation

UPI PG API v1

Integration-only guide for websites and Android apps. Use these endpoints to collect payment and confirm status securely.

API Base URLhttps://pay.tezzcorp.in/api/v1
Get API Keyhttps://pay.tezzcorp.in/get-api-key

Get API Key (INR 499.00)

STEP 1
POST /public/onboarding/start
Create onboarding request and receive checkout session ID.
STEP 2
POST /checkout/{session_id}/start
Generate UPI URI and QR for activation fee payment.
STEP 3
GET /public/onboarding/{ref}/status
Poll status and receive auto-generated API credentials after success.
Self-service onboarding page is available publicly.
Open Get API Key

Authentication

Merchant POST endpoints require signature. Status endpoints use key + secret headers.
{
    "signed_post_headers": {
        "X-API-KEY": "merchant_token",
        "X-Timestamp": "unix_seconds",
        "X-Signature": "hash_hmac(sha256, timestamp.raw_json_body, api_secret)"
    },
    "status_headers": {
        "X-API-KEY": "merchant_token",
        "X-API-SECRET": "merchant_secret"
    }
}
Replay-safe signature format is recommended for production.

Merchant Endpoints

POST
/payments/intents
Create payment intent and return UPI URI + QR URL
GET
/payments/{order_id}
Check payment status
POST
/payments/verify-utr
Manually verify UTR / RRN
POST
/payments/checkout-sessions
Create hosted checkout session
GET
/payments/checkout-sessions/{session_id}
Read checkout session details
GET
/checkout/{session_id}
Public checkout details
POST
/checkout/{session_id}/start
Start checkout and generate QR
GET
/checkout/{session_id}/status
Poll checkout status
GET
/checkout/{session_id}/receipt
Fetch receipt after successful payment

Onboarding Payload

{
    "full_name": "Aman Verma",
    "company_name": "Aman Digital Services",
    "mobile": "9876543210",
    "email": "aman@example.com",
    "pan_no": "ABCDE1234F",
    "aadhaar_no": "123412341234",
    "paytm_mid": "MerchantMID123456",
    "paytm_upi_id": "merchantupi@ptys",
    "paytm_upi_name": "Aman Digital",
    "webhook_url": "https://merchant.example.com/webhook"
}
Use this body with /public/onboarding/start.

Create Intent Payload

{
    "order_id": "ORD_2026_1001",
    "amount": 199,
    "note": "Subscription payment",
    "customer_mobile": "9876543210",
    "customer_email": "buyer@example.com",
    "callback_url": "https://merchant.example.com/payment-webhook"
}
Use this body with /payments/intents.

cURL: Start Onboarding

curl -X POST 'https://pay.tezzcorp.in/api/v1/public/onboarding/start' \
  -H 'Content-Type: application/json' \
  -d '{"full_name":"Aman Verma","company_name":"Aman Digital Services","mobile":"9876543210","email":"aman@example.com","pan_no":"ABCDE1234F","aadhaar_no":"123412341234","paytm_mid":"MerchantMID123456","paytm_upi_id":"merchantupi@ptys","paytm_upi_name":"Aman Digital","webhook_url":"https://merchant.example.com/webhook"}'
Public endpoint. No API key required to start onboarding.

cURL: Create Intent

curl -X POST 'https://pay.tezzcorp.in/api/v1/payments/intents' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: <API_KEY>' \
  -H 'X-Timestamp: <UNIX_SECONDS>' \
  -H 'X-Signature: <HMAC_SHA256>' \
  -d '{"order_id":"ORD_2026_1001","amount":199,"note":"Subscription payment","customer_mobile":"9876543210","customer_email":"buyer@example.com","callback_url":"https://merchant.example.com/payment-webhook"}'
Replace placeholders with your generated credentials.

Website Integration Snippet

const payload = {
  order_id: 'ORD_2026_1001',
  amount: 199.00,
  note: 'Subscription payment',
  customer_mobile: '9876543210',
  customer_email: 'buyer@example.com'
};

const rawBody = JSON.stringify(payload);
const timestamp = Math.floor(Date.now() / 1000).toString();
const signature = hmacSha256(timestamp + '.' + rawBody, API_SECRET);

const response = await fetch('https://pay.tezzcorp.in/api/v1/payments/intents', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-KEY': API_KEY,
    'X-Timestamp': timestamp,
    'X-Signature': signature
  },
  body: rawBody
});

const json = await response.json();
// Show json.data.upi.qr_code_url and poll /payments/{order_id}
Server-side signing is mandatory. Never expose API secret in frontend code.

Android UPI Launch

val upiUri = Uri.parse(apiResponse.data.upi.uri)
val intent = Intent(Intent.ACTION_VIEW, upiUri)
startActivity(Intent.createChooser(intent, "Pay with UPI"))
Read upi.uri from API response and launch UPI intent.