Get Start

Welcome to CholtiPay API

Last updated: June 06, 2024

CholtiPay is a simple and secure payment automation tool designed to use your personal account as a payment gateway. Accept payments seamlessly from your customers through your website. Here you will find a complete overview of how CholtiPay works and how you can integrate the API into your application.


API Introduction

The CholtiPay Payment Gateway enables Merchants to receive money by temporarily redirecting customers to our secure portal. After the payment is complete, the customer is returned to the merchant's site, and the Merchant receives a server-to-server notification containing the transaction details.

API Endpoints

REST APIs are supported in two environments. Use the Sandbox environment for testing purposes, then move to the live environment for production processing. Your server must support cURL.

POST https://pay.choltipay.top/api/payment/create
POST https://pay.choltipay.top/api/payment/verify

Parameters & Headers

The following JSON variables need to be POSTed to initialize the payment process in the gateway URL.

Parameter Description Required Example
cus_name Customer Full Name YES John Doe
cus_email Email address of the customer YES john@example.com
amount Total amount payable (e.g., 10 or 10.50). YES 10.50
success_url URL to redirect customer upon success. YES https://domain.com/success
cancel_url URL to redirect customer upon cancellation. YES https://domain.com/cancel
meta_data Pass any JSON formatted custom data. NO { "order_id": 123 }

Variables needed for Payment Verification Request.

Parameter Description Required Example
transaction_id Transaction ID received as a query parameter from the success URL. YES OVKPXW165414

Authentication Headers

Header Key Value Description
Content-Type application/json
API-KEY Your App Key from API credentials
SECRET-KEY Your Secret Key from API credentials
BRAND-KEY Your Brand Key from Brands settings

Code Integration

Implement our payment gateway directly into your backend code. Below are the sample codes for generating a payment and verifying it.

Sample Request (Create Payment)


      <?php

      $curl = curl_init();

      curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://pay.choltipay.top/api/payment/create',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS =>'{"success_url":"yourdomain.com/success","cancel_url":"yourdomain.com/cancel","webhook_url":"yourdomain.com/webhook","metadata":{"phone":"016****"},"amount":"10"}',
        CURLOPT_HTTPHEADER => array(
          'API-KEY: gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
          'Content-Type: application/json'
        ),
      ));

      $response = curl_exec($curl);

      curl_close($curl);
      echo $response;

      ?>
      

      <?php
      $client = new Client();
      $headers = [
        'API-KEY' => 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
        'Content-Type' => 'application/json'
      ];
      $body = '{
        "success_url": "yourdomain.com/success",
        "cancel_url": "yourdomain.com/cancel",
        "webhook_url": "yourdomain.com/webhook",
        "metadata": {
          "phone": "016****"
        },
        "amount": "10"
      }';
      $request = new Request('POST', 'https://pay.choltipay.top/api/payment/create', $headers, $body);
      $res = $client->sendAsync($request)->wait();
      echo $res->getBody();
      ?>
      

      const axios = require('axios');
      let data = JSON.stringify({
        "success_url": "yourdomain.com/success",
        "cancel_url": "yourdomain.com/cancel",
        "webhook_url": "yourdomain.com/webhook",
        "metadata": {
          "phone": "016****"
        },
        "amount": "10"
      });

      let config = {
        method: 'post',
        maxBodyLength: Infinity,
        url: 'https://pay.choltipay.top/api/payment/create',
        headers: { 
          'API-KEY': 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef', 
          'Content-Type': 'application/json'
        },
        data : data
      };

      axios.request(config)
      .then((response) => {
        console.log(JSON.stringify(response.data));
      })
      .catch((error) => {
        console.log(error);
      });


      

      import requests
      import json

      url = "https://pay.choltipay.top/api/payment/create"

      payload = json.dumps({
        "success_url": "yourdomain.com/success",
        "cancel_url": "yourdomain.com/cancel",
        "webhook_url": "yourdomain.com/webhook",
        "metadata": {
          "phone": "016****"
        },
        "amount": "10"
      })
      headers = {
        'API-KEY': 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
        'Content-Type': 'application/json'
      }

      response = requests.request("POST", url, headers=headers, data=payload)

      print(response.text)


        

      package main

      import (
        "fmt"
        "strings"
        "net/http"
        "io/ioutil"
      )

      func main() {

        url := "https://pay.choltipay.top/api/payment/create"
        method := "POST"

        payload := strings.NewReader(`{"success_url":"yourdomain.com/success","cancel_url":"yourdomain.com/cancel","webhook_url":"yourdomain.com/webhook","metadata":{"phone":"01521412457"},"amount":"10"}`)

        client := &http.Client {
        }
        req, err := http.NewRequest(method, url, payload)

        if err != nil {
          fmt.Println(err)
          return
        }
        req.Header.Add("API-KEY", "gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef")
        req.Header.Add("Content-Type", "application/json")

        res, err := client.Do(req)
        if err != nil {
          fmt.Println(err)
          return
        }
        defer res.Body.Close()

        body, err := ioutil.ReadAll(res.Body)
        if err != nil {
          fmt.Println(err)
          return
        }
        fmt.Println(string(body))
      }
        

Response Details

Field Name Type Description
Success Response
status bool TRUE
message String Message for Status
payment_url String Payment Link (where customers will complete their payment)
Error Response
status bool FALSE
message String Message associated with the error response
Completing Payment Page task you will be redirected to success or cancel page based on transaction status with the following Query Parameters: yourdomain.com/(success/cancel)?transactionId=******&paymentMethod=***&paymentAmount=**.**&paymentFee=**.**&status=pending or success or failed

Verify Request (Check Payment)


      <?php


      $curl = curl_init();

      curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://pay.choltipay.top/api/payment/verify',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS =>'{"transaction_id":"ABCDEFH"}',
        CURLOPT_HTTPHEADER => array(
          'API-KEY: gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
          'Content-Type: application/json'
        ),
      ));

      $response = curl_exec($curl);

      curl_close($curl);
      echo $response;


      ?>
      

      <?php
      $client = new Client();
      $headers = [
        'API-KEY' => 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
        'Content-Type' => 'application/json'
      ];
      $body = '{
        "transaction_id": "ABCDEFH"
      }';
      $request = new Request('POST', 'https://pay.choltipay.top/api/payment/verify', $headers, $body);
      $res = $client->sendAsync($request)->wait();
      echo $res->getBody();

      ?>
      

      const axios = require('axios');
      let data = JSON.stringify({
        "transaction_id": "ABCDEFH"
      });

      let config = {
        method: 'post',
        maxBodyLength: Infinity,
        url: 'https://pay.choltipay.top/api/payment/verify',
        headers: { 
          'API-KEY': 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef', 
          'Content-Type': 'application/json'
        },
        data : data
      };

      axios.request(config)
      .then((response) => {
        console.log(JSON.stringify(response.data));
      })
      .catch((error) => {
        console.log(error);
      });



      

      import http.client
      import json

      conn = http.client.HTTPSConnection("local.pay.expensivepay.com")
      payload = json.dumps({
        "transaction_id": "ABCDEFH"
      })
      headers = {
        'API-KEY': 'gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef',
        'Content-Type': 'application/json'
      }
      conn.request("POST", "/api/payment/verify", payload, headers)
      res = conn.getresponse()
      data = res.read()
      print(data.decode("utf-8"))

        

      package main

      import (
        "fmt"
        "strings"
        "net/http"
        "io/ioutil"
      )

      func main() {

        url := "https://pay.choltipay.top/api/payment/verify"
        method := "POST"

        payload := strings.NewReader(`{"transaction_id":"ABCDEFH"}`)

        client := &http.Client {
        }
        req, err := http.NewRequest(method, url, payload)

        if err != nil {
          fmt.Println(err)
          return
        }
        req.Header.Add("API-KEY", "gnXi7etgWNhFyFGZFrOMYyrmnF4A1eGU5SC2QRmUvILOlNc2Ef")
        req.Header.Add("Content-Type", "application/json")

        res, err := client.Do(req)
        if err != nil {
          fmt.Println(err)
          return
        }
        defer res.Body.Close()

        body, err := ioutil.ReadAll(res.Body)
        if err != nil {
          fmt.Println(err)
          return
        }
        fmt.Println(string(body))
      }
        
Sample Response

      {
          "cus_name": "John Doe",
          "cus_email": "john@gmail.com",
          "amount": "900.000",
          "transaction_id": "OVKPXW165414",
          "metadata": {
            "phone": "015****",
          },
          "payment_method": "bkash",
          "status": "COMPLETED"
      }
      

Response Details

Field Name Type Description
Success Response
status string COMPLETED or PENDING or ERROR
cus_name String Customer Name
cus_email String Customer Email
amount String Amount
transaction_id String Transaction id Generated by System
metadata json Metadata used for Payment creation
Error Response
status bool FALSE
message String Message associated with the error response

Plugins & Modules

We offer ready-made plugins and modules for popular platforms. Download and install them to get started instantly.

WordPress / WooCommerce

Integrate our payment gateway into your WordPress/WooCommerce website effortlessly.

Download Plugin

WHMCS Module

Integrate our payment gateway seamlessly into your WHMCS billing setup.

Download Module

SMM Panel Module V2

Enhance your SMM panel with our advanced payment gateway integration module.

Download Module

Sketchware SWB

Integrate our payment gateway seamlessly into your custom Sketchware projects.

Download SWB

Android Mobile App

Download our android mobile app and connect with your live Api Keys to manage everything on the go.