Secure • Fast • Multilingual

Easy SMS OTP API for modern apps

Integrate secure phone number validation with elegant simplicity. Send localized SMS verification codes in Arabic and French with strong authorization and clear responses.

POST
Single endpoint flow
AR / FR
Localized SMS
200–503
Clear response model
Request Preview
POST /api/sms/validation/{validation_key}

Headers:
Validation-token: your_validation_token
Content-Type: application/json

{
  "phone": "44800028",
  "lang": "ar",
  "code": "234323"
}
200 Success
{
  "code": 654321,
  "balance": 95
}

Introduction

The Chinguisoft SMS Validation API simplifies phone number validation by sending a secure SMS to the provided number. Each message includes a unique validation code and a localized explanatory message based on the recipient’s language preference.

Endpoint
https://chinguisoft.com/api/sms/validation/{validation_key}

Features

Built for simplicity, security, and flexible integration across platforms.

Prepaid model

Pay only for what you use with no hidden fees.

Student-friendly pricing

Offered to students at cost price without extra profit.

Maximum simplicity

Easy to integrate and straightforward to operate.

Multilingual support

Send verification SMS in Arabic ar or French fr.

Detailed error handling

Use clear response codes for fast debugging and recovery.

Integration flexibility

Examples included for Curl, Python, PHP, Java, JavaScript, and Dart.

Pricing

Simple pricing by account category. All prices below are in N.Ogya for each validation SMS sent.

Student
0.25 N.Ogya / SMS

Best for student projects and personal academic use.

Graduate
0.30 N.Ogya / SMS

Designed for graduates building personal or early-stage applications.

Private Company
0.40 N.Ogya / SMS

A practical rate for private companies and commercial platforms.

Public Company
0.50 N.Ogya / SMS

Suitable for public companies and larger institutional deployments.

Quick Start

Simple and quick steps to start the integration into your project.

Quick Navigation

Step 0: Application

  • Login or signup to your Chinguisoft account.
  • Open the SMS page from your profile on website header.
  • Create an application with your app name.
  • Copy your token and store it securely.
  • To increase your balance, contact us here.

Step 1: Authentication

Every request must include:

Validation Key

Provided by Chinguisoft for your application.

Validation token

Required for authorization on every request.

If you do not have a Validation-token, or to increase your balance, please contact us here.

Step 2: Request Details

POST
https://chinguisoft.com/api/sms/validation/{validation_key}
Headers
Headers
Validation-token: your_validation_token
Content-Type: application/json
Body Parameters
JSON Body
{
  "phone": "44800028",
  "lang": "ar",
  "code": "234323"
}
Parameter Required Description
phone Yes Must start with 2, 3, or 4 and contain 8 digits.
lang Yes Language of the SMS. Options: ar or fr.
code No Between 3 and 6 digits. If omitted, a code is generated automatically.

Step 3: Responses

Success (200)
{
  "code": 654321,
  "balance": 95
}
Validation Error (422)
{
  "errors": {
    "phone": [
      "The phone field is required.",
      "The phone format is invalid."
    ],
    "lang": [
      "The lang field is required.",
      "The selected lang is invalid."
    ],
    "code": [
      "The code must be between 3 and 6 digits."
    ]
  }
}
Too Many Requests (429)
{
  "message": "Too many requests, please slow down."
}
Unauthorized (401)
{
  "error": "Unauthorized"
}
Payment Required (402)
{
  "error": "Payment Required: please contact us",
  "balance": 2
}
Service Unavailable (503)
{
  "error": "Service Unavailable: working on it"
}

SMS Sent to Phone Number

The SMS content adapts to the selected language parameter.

lang = ar

Arabic message payload
{
  "sender": "Chinguisoft",
  "sms": "your_app_name:
رمزك هو 123456.
لا تشاركه مع أي شخص.
ستنتهي صلاحيته خلال 10 دقائق.
إذا لم تطلب هذا الرمز، تجاهل هذه الرسالة."
}

lang = fr

French message payload
{
  "sender": "Chinguisoft",
  "sms": "your_app_name:
Votre code est 123456.
Ne le partagez avec personne.
Il expirera dans 10 min.
Si non demandé, ignorez ce message."
}
If you need to customize the SMS, please contact us here.

Example Code

Switch between languages and frameworks using Bootstrap tabs.

Curl
curl -X POST https://chinguisoft.com/api/sms/validation/your_validation_key \
-H "Validation-token: your_validation_token" \
-H "Content-Type: application/json" \
-d '{
  "phone": "44800028",
  "lang": "ar"
}'
import requests

validation_key = 'your_validation_key'
token = 'your_validation_token'

url = f"https://chinguisoft.com/api/sms/validation/{validation_key}"

headers = {
    'Validation-token': token,
    'Content-Type': 'application/json',
}

data = {
    'phone': '44800028',
    'lang': 'ar'
}

response = requests.post(url, headers=headers, json=data)
print(response.text)
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$validationKey = 'your_validation_key';
$token = 'your_validation_token';

$client = new Client();

$response = $client->post("https://chinguisoft.com/api/sms/validation/$validationKey", [
    'headers' => [
        'Validation-token' => $token,
        'Content-Type' => 'application/json',
    ],
    'json' => [
        'phone' => '44800028',
        'lang' => 'ar'
    ]
]);

echo $response->getBody();
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ValidationApiExample {
    public static void main(String[] args) {
        String validationKey = "your_validation_key";
        String token = "your_validation_token";
        String apiUrl = "https://chinguisoft.com/api/sms/validation/" + validationKey;

        String requestBody = "{\"phone\":\"44800028\", \"lang\":\"ar\"}";

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(apiUrl))
                .header("Content-Type", "application/json")
                .header("Validation-token", token)
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println("Response Code: " + response.statusCode());
            System.out.println("Response Body: " + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
const axios = require('axios');

const validationKey = 'your_validation_key';
const token = 'your_validation_token';

const requestData = {
    phone: '44800028',
    lang: 'ar'
};

axios.post(`https://chinguisoft.com/api/sms/validation/${validationKey}`, requestData, {
    headers: {
        'Validation-token': token,
        'Content-Type': 'application/json'
    }
})
.then(response => {
    console.log('Success:', response.data);
})
.catch(error => {
    if (error.response) {
        console.log('Error:', error.response.data);
    } else {
        console.error('Request failed:', error.message);
    }
});
import 'dart:convert';
import 'package:http/http.dart' as http;

void main() async {
  final validationKey = 'your_validation_key';
  final token = 'your_validation_token';
  final url = Uri.parse('https://chinguisoft.com/api/sms/validation/$validationKey');

  final headers = {
    'Validation-token': token,
    'Content-Type': 'application/json',
  };

  final body = jsonEncode({
    'phone': '44800028',
    'lang': 'ar',
  });

  try {
    final response = await http.post(url, headers: headers, body: body);

    if (response.statusCode == 200) {
      print('Success: ${response.body}');
    } else {
      print('Error: ${response.statusCode} - ${response.body}');
    }
  } catch (e) {
    print('Request failed: $e');
  }
}

Tips for Using the API

  • Balance Check: Ensure your account has enough balance for validation requests.
  • Secure Your Keys: Keep your validation_key and Validation-token safe.
  • Retry Logic: Handle 503 gracefully and implement retries if needed.
1