Voter Mobile Link API

Submits an instant mobile-linking request for the given EPIC number and returns a ref_id for tracking.

v1
GET https://mail.versatile-lavender-rat.163-61-39-39.cpanel.site/api/v1/voter-mobile-link

Authentication

API key + API secret headers, or a Bearer JWT. Obtain the JWT from POST /api/v1/auth/token using your key and secret; tokens are valid for 3600 seconds.

SchemeLocationValue
JWT bearerHeaderAuthorization: Bearer <token>
API keyHeaderX-API-Key: pk_xxxxxxxx
API secretHeaderX-API-Secret: sk_xxxxxxxx

Headers

HeaderRequiredDescription
AuthorizationOptionalBearer JWT issued by the token endpoint.
X-API-KeyYesYour API key (pk_…).
X-API-SecretYesYour API secret (sk_…), shown once at creation.
Content-TypeYesapplication/json
X-Request-IdNoYour idempotency key; echoed back in the response.

Parameters & validation rules

NameTypeRequiredValidationDescription
api_key string Yes Your API key.
epic string Yes Voter EPIC number.
mobile string Yes 10 digits 10-digit mobile number.

Example request

curl -X GET \
  "https://www.apicentre.in/api/voter_link_instent?api_key=YOUR_API_KEY&epic=EPIC&mobile=MOBILE" \
  -H "Accept: application/json"
<?php
$ch = curl_init("https://www.apicentre.in/api/voter_link_instent?api_key=YOUR_API_KEY&epic=EPIC&mobile=MOBILE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);
const res  = await fetch("https://www.apicentre.in/api/voter_link_instent?api_key=YOUR_API_KEY&epic=EPIC&mobile=MOBILE");
const data = await res.json();
console.log(data);
import requests

res = requests.get("https://www.apicentre.in/api/voter_link_instent?api_key=YOUR_API_KEY&epic=EPIC&mobile=MOBILE")
print(res.json())
import java.net.URI;
import java.net.http.*;

String payload = "{\"epic_number\": \"ABC1234567\"}";

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.yourdomain.com/api/v1/voter-mobile-link"))
    .header("x-api-key", "YOUR_API_KEY")
    .header("x-api-secret", "YOUR_API_SECRET")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();

HttpResponse<String> response = HttpClient.newHttpClient()
    .send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
package main

import (
    "bytes"
    "fmt"
    "io"
    "net/http"
)

func main() {
    payload := []byte(`{"epic_number": "ABC1234567"}`)

    req, _ := http.NewRequest("POST", "https://api.yourdomain.com/api/v1/voter-mobile-link", bytes.NewBuffer(payload))
    req.Header.Set("x-api-key", "YOUR_API_KEY")
    req.Header.Set("x-api-secret", "YOUR_API_SECRET")
    req.Header.Set("Content-Type", "application/json")

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}

Responses

Success 200
{
    "status": "200",
    "message": "Number linked pending Complete within 5 min",
    "epic": "TMM0007133",
    "mobile": "7250000919",
    "ref_id": "S12093V8C2506261200002",
    "application_no": "VMLINK_994E5C7646B1F4D1",
    "amount": "5.00",
    "balance_left": "27216.27"
}
Error 4xx
{
    "status": "404",
    "message": "Request Failed"
}

HTTP status codes

CodeMeaning
200Success - verification completed and wallet debited.
400Validation failed - check the parameter rules below.
401Missing or invalid JWT / API key.
402Insufficient wallet balance.
403API not purchased or key not permitted for this endpoint.
404Record not found at the source registry.
422Upstream provider returned an unprocessable response.
429Rate limit exceeded - retry after the window resets.
500Unexpected server error - safe to retry with the same request_id.
503Upstream registry temporarily unavailable.

Rate limit & billing

Rate limit
60 req/min per key
Charge
₹7.50 per successful call
Failed calls
Not charged (4xx/5xx)

When throttled, the API returns 429 with X-RateLimit-Limit, X-RateLimit-Remaining and Retry-After headers.