Validate OTP
POST {api-url}/validateOTP?ns={community}
Use this endpoint to verify an OTP string provided by a user. The State parameter must strictly match the Reference string that was passed into the /sendOTP call.
Once an OTP is successfully validated via this endpoint, it is immediately cleared from the userβs account and becomes invalid. This allows integrators to securely build their own custom OTP-gated flows using the Celbux platform.
Parameters
Section titled βParametersβ| Field | Type | Requirement | Description |
|---|---|---|---|
Username | String | Required | The username of the user. |
IDNumber | String | Optional | The ID number of the user. |
OTP | String | Required | The 6-digit OTP string provided by the user. |
State | String | Required | The Reference string used when generating the OTP. |
Metadata | String | Optional | Any other detail to store with this transaction. |
Example Body
Section titled βExample Bodyβ{ "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""}Parameters
Section titled βParametersβ| Field | Type | Description |
|---|---|---|
TID | String | TID of the executed operation. |
State | String | Transaction state (Success or Failed). |
Status | String | Transaction status code (1 or negative error code). |
Error | String | Failure reason, if applicable. |
Example Body
Section titled βExample Bodyβ{ "TID": "15000000000", "State": "Success", "Status": "1", "Error": ""}curl -X POST '{api-url}/validateOTP?ns={community}' \-H 'Authorization: bearer YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"Username":"27820000000","IDNumber":"","OTP":"789230","State":"REF123","Metadata":""}'using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
class Program{ static async Task Main(string[] args) { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "{api-url}/validateOTP?ns={community}"); request.Headers.Add("Authorization", "bearer YOUR_TOKEN");
var jsonPayload = @"{ ""Username"": ""27820000000"", ""IDNumber"": """", ""OTP"": ""789230"", ""State"": ""REF123"", ""Metadata"": """"}"; request.Content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request); response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); }}package main
import ( "fmt" "io/ioutil" "net/http" "strings")
func main() { url := "{api-url}/validateOTP?ns={community}" payload := strings.NewReader(`{"Username":"27820000000","IDNumber":"","OTP":"789230","State":"REF123","Metadata":""}`)
req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "bearer YOUR_TOKEN") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req) defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body) fmt.Println(string(body))}import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class ApiRequest { public static void main(String[] args) throws Exception { var payload = """ { "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""} """;
var request = HttpRequest.newBuilder() .uri(URI.create("{api-url}/validateOTP?ns={community}")) .header("Authorization", "bearer YOUR_TOKEN") .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(payload)) .build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }}// Requires Node.js v18+(async () => { const url = '{api-url}/validateOTP?ns={community}'; const payload = { "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""};
try { const response = await fetch(url, { method: 'POST', headers: { 'Authorization': 'bearer YOUR_TOKEN', 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); const data = await response.json(); console.log(data); } catch (error) { console.error('Error:', error); }})();<?php$curl = curl_init();
curl_setopt_array($curl, array( CURLOPT_URL => '{api-url}/validateOTP?ns={community}', 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 => '{ "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""}', CURLOPT_HTTPHEADER => array( 'Authorization: bearer YOUR_TOKEN', 'Content-Type: application/json' ),));
$response = curl_exec($curl);curl_close($curl);echo $response;import requestsimport json
url = "{api-url}/validateOTP?ns={community}"payload = { "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""}
headers = { "Authorization": "bearer YOUR_TOKEN", "Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)print(response.json())require 'uri'require 'net/http'require 'json'
url = URI("{api-url}/validateOTP?ns={community}")
http = Net::HTTP.new(url.host, url.port)http.use_ssl = true
request = Net::HTTP::Post.new(url)request["Authorization"] = 'bearer YOUR_TOKEN'request["Content-Type"] = 'application/json'
request.body = JSON.dump({ "Username": "27820000000", "IDNumber": "", "OTP": "789230", "State": "REF123", "Metadata": ""})
response = http.request(request)puts response.read_body