RC PDF API

Returns the complete registration certificate for a vehicle number as a print-ready PDF together with the structured record: owner name, maker and model, fuel type, registration and fitness dates, insurance and PUC validity, and blacklist status.

v1
POST https://www.versatile-lavender-rat.163-61-39-39.cpanel.site/api/v1/rc-pdf

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
rc_number string Yes /^[A-Z]{2}[0-9]{1,2}[A-Z]{0,3}[0-9]{4}$/ Vehicle registration number without spaces, e.g. MH12AB1234.

Example request

curl -X POST 'https://api.yourdomain.com/api/v1/rc-pdf' \
  -H 'x-api-key: YOUR_API_KEY' \
  -H 'x-api-secret: YOUR_API_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"rc_number": "MH12AB1234"}'
<?php
$payload = ['rc_number' => 'MH12AB1234'];
$ch = curl_init('https://api.yourdomain.com/api/v1/rc-pdf');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_HTTPHEADER     => [
        'x-api-key: YOUR_API_KEY',
        'x-api-secret: YOUR_API_SECRET',
        'Content-Type: application/json',
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response['data']);
const res = await fetch('https://api.yourdomain.com/api/v1/rc-pdf', {
  method: 'POST',
  headers: {
    'x-api-key': 'YOUR_API_KEY',
    'x-api-secret': 'YOUR_API_SECRET',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"rc_number": "MH12AB1234"}),
});
const json = await res.json();
console.log(json.data);
import requests

res = requests.post(
    'https://api.yourdomain.com/api/v1/rc-pdf',
    json={"rc_number": "MH12AB1234"},
    headers={
        'x-api-key': 'YOUR_API_KEY',
        'x-api-secret': 'YOUR_API_SECRET',
    },
    timeout=30,
)
print(res.json()['data'])
import java.net.URI;
import java.net.http.*;

String payload = "{\"rc_number\": \"MH12AB1234\"}";

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.yourdomain.com/api/v1/rc-pdf"))
    .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(`{"rc_number": "MH12AB1234"}`)

    req, _ := http.NewRequest("POST", "https://api.yourdomain.com/api/v1/rc-pdf", 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
{
  "success": true,
  "request_id": "req_8f21c0b4a7",
  "meta": {
    "charged": 6.0,
    "environment": "production",
    "balance": 4821.5,
    "response_ms": 312
  },
  "data": {
    "rc_number": "MH12AB1234",
    "owner_name": "RAHUL SHARMA",
    "maker_model": "MARUTI SUZUKI SWIFT VXI",
    "fuel_type": "PETROL",
    "vehicle_class": "LMV",
    "registration_date": "2021-03-18",
    "fitness_upto": "2036-03-17",
    "insurance_valid_upto": "2026-03-17",
    "puc_valid_upto": "2026-09-10",
    "blacklist_status": "NA",
    "pdf_url": "https://cdn.example.com/pdf/rc/8f21c0b4.pdf",
    "pdf_expires_in": 900
  }
}
Error 4xx
{
  "success": false,
  "request_id": "req_8f21c0b4a7",
  "error": {
    "code": "RC_NOT_FOUND",
    "message": "Vehicle record unavailable at source."
  },
  "meta": {
    "charged": 0
  }
}

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
₹6.00 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.