by Profiden

Developer documentation

Emver Verification API

One consistent JSON API for identity, business, banking and workforce verification. Every API is a single POST request authenticated with an API key, with the same envelope, the same error format and a sandbox to build against before you go live.

APIs
113
Categories
7
Format
JSON
Auth
Bearer

Getting started

Four steps from zero to a verified record.

  1. 1

    Get console access

    Your account manager enables the developer console for your organisation and grants the APIs you need. Sign in at the console with your organisation login.

  2. 2

    Create an API key

    Under API Keys, create a sandbox key first. The full key is shown once; store it in a secrets manager. Keys are environment-specific.

  3. 3

    Send a sandbox request

    Pick any API below, copy the sample, replace YOUR_API_KEY and the input values, and send it to the sandbox base URL. Sandbox calls draw from your demo allowance and are never billed.

  4. 4

    Go live

    Create a production key, point your integration at the production base URL, and top up your wallet. Production calls are billed per successful hit at your contracted rate.

Authentication

Every request carries your API key as a Bearer token in the Authorization header. There is no session or OAuth handshake.

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
  • Environment-bound. A sandbox key is rejected by the production server and vice versa. Keep one key per environment.
  • Shown once. The console reveals the full key only at creation; afterwards only its prefix is visible. Rotate by creating a new key and revoking the old one.
  • Scoped to your organisation. A key can only call the APIs granted to your account. Calling an API that is not enabled returns 403.
  • Server-side only. Never embed a key in a browser or mobile app; proxy calls through your backend.

Environments

Two base URLs. Same paths, same payloads, different keys and billing.

EnvironmentBase URLBilling
Sandbox https://app.emver.io/api/sandbox Draws demo hits. Never billed.
Production https://app.emver.io/api Billed per hit to your wallet or postpaid plan.

Every endpoint is {base_url}/{version}/{api-slug}. The version segment (v1 today) is set per API and printed on its page, so a future revision of one API never changes the path of another.

Each API page has a sandbox / production switch that rewrites the sample code for you. Production access is enabled per API by your account manager once the sandbox integration is signed off.

Sandbox mock mode

Set a sandbox key's Sandbox responses to Mock (API Keys → Generate or Edit access) and its calls are answered with sample responses: no source is contacted, no demo hits are used and nothing is billed. Answers have the same shape as live ones, carry "mock": true, and can be read back from /requests/{request_id}. Input validation still runs first, so a malformed value gets a real 422. Production keys always run live.

  • Test inputs. The last character of the first request field you send picks the scenario: N → not_found, X → invalid_input, E → provider_error, anything else → success (e.g. PAN ABCDE1234N answers "not found").
  • Header override. Send X-Mock-Scenario: success | not_found | invalid_input | provider_error to choose directly — handy for numeric inputs. An unknown value is refused with 400.
  • Outcomes. Each scenario answers with its own HTTP status (by default 200, 404, 422 and 503); provider_error behaves like a real outage — marked failed, with Retry-After.

Making a request

Every API is POST {base_url}/{version}/{api-slug} with a JSON body. The fields each API accepts are listed on its page; required fields are marked.

curl -X POST https://app.emver.io/api/sandbox/v1/aadhaar-api-without-otp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "...": "fields listed on the API page" }'
  • Field names are stable. They are the canonical names shown in these docs and do not change when we improve a source behind the scenes.
  • Send strings as given. Numbers such as PAN, Aadhaar or account numbers are strings; do not strip leading zeros.
  • Dates are ISO. Use YYYY-MM-DD unless the field says otherwise.
  • Consent is yours to collect. You confirm the person has authorised the verification before you call us; keep the record of that consent.
  • Timeouts. Most APIs answer within a few seconds; allow up to 60 seconds for sources that are slow at peak hours.

Responses

A successful call returns HTTP 200 with a JSON body. The exact shape is documented per API; most follow this envelope:

{
  "status": 200,
  "message": "Verification successful",
  "data": {
    ... fields listed on the API page ...
  }
}
  • A "not found" or "mismatch" is a result, not an error. The record was checked and the answer is negative; it comes back as HTTP 200 with the outcome in the body, and it is billed like any other successful hit.
  • Types are declared. Each API page shows the type of every field (string, integer, boolean, date) so you can map it straight into your models.
  • Asynchronous sources. A few APIs depend on sources that answer later. Those calls answer HTTP 202 with a status_url; see Results, retries & webhooks.

Document APIs

Some APIs deliver a document — a credit bureau PDF, for example — rather than fields. Their HTTP 200 answer is the document itself, in one call:

{
  "status": "success",
  "message": "Credit report fetched successfully",
  "report_url": "https://app.emver.io/api/sandbox/requests/req_xxxxxxxxxxxxxxxxxxxxxxxx/report",
  "report": {
    "format": "pdf",
    "mime": "application/pdf",
    "filename": "cibil-transunion-pdf-req_xxxxxxxxxxxxxxxxxxxxxxxx.pdf",
    "size": 183422,
    "url": "https://app.emver.io/api/sandbox/requests/req_xxxxxxxxxxxxxxxxxxxxxxxx/report",
    "expires_at": "2026-10-20T10:12:00+05:30",
    "base64": "JVBERi0xLjQK..."
  }
}
  • No second call is needed. report.base64 is the whole file: decode it and save it as report.filename.
  • Downloading is optional. If you would rather stream the file, or need it again later, GET report_url with the same API key — it answers the raw file with its Content-Type, not JSON. Fetching the call again via GET /requests/{request_id} also carries the same report block.
  • Kept for 72 hours. report.expires_at says when the file is deleted; after that the URL answers 410 and report disappears from the call. Store the file on your side if you need it longer.
  • A negative outcome is still JSON. When the source has no record, the answer is the usual {status, message} body without a report block.
  • JSON APIs can add a PDF. For an API that answers fields, add ?report=pdf to the call to receive a PDF report in the same report shape alongside the JSON.
curl https://app.emver.io/api/sandbox/requests/req_xxxxxxxxxxxxxxxxxxxxxxxx/report \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o report.pdf

Results, retries & webhooks

Every answer carries a request_id (body and X-Request-Id header), and a Server-Timing header that splits the call's time into vendor (the data source), app (us) and total, in milliseconds. You can read any call back later with the same key:

curl https://app.emver.io/api/sandbox/requests/req_xxxxxxxxxxxxxxxxxxxxxxxx \
  -H "Authorization: Bearer YOUR_API_KEY"

status is processing (a two-step source is still working), completed (the answer is in result) or failed (not answered, never billed). result is removed once your data retention window has passed.

  • Webhooks. Add an endpoint under Webhooks in the developer console to have verification.completed / verification.failed events POSTed to you — by default for late (202) answers, optionally for every call. Each POST carries Webhook-Id, Webhook-Timestamp and Webhook-Signature: v1=<hex>, the HMAC-SHA256 of "{timestamp}.{raw body}" with the endpoint's secret. Answer 2xx; anything else is retried for up to a day.
  • Safe retries. Send an Idempotency-Key header (any unique string). A retry with the same key within 24 hours returns the first answer, marked Idempotent-Replayed: true, and is not billed again. Reusing a key for a different body is refused with 422; a call that was not billed (402, 5xx) frees its key.
  • Your reference. Send X-Client-Reference with your own id; it is echoed back, searchable in the console's API logs and included in webhooks.

Errors & status codes

Anything other than a verification result comes back with a non-2xx status and a two-field body:

{
  "status": 401,
  "message": "Invalid or expired API key"
}
StatusMeaningBilled
200 Verified. The outcome (including a negative one) is in the body. Yes
400 / 422 The request was rejected: a required field is missing or a value is badly formatted. Fix the input and resend. No
401 The API key is missing, invalid, expired or belongs to the other environment. No
402 Your wallet balance or demo allowance is exhausted. Top up in the console and resend. No
403 This API is not enabled for your account in this environment, or the key is restricted to other APIs. No
404 The requested record could not be found at the source. Yes
429 Too many requests. Slow down and retry after the pause indicated by the response. No
503 (service_maintenance) The API is in a scheduled maintenance window. The body carries code service_maintenance and the window; Retry-After says how many seconds until it ends. You are emailed when it starts and when it is back. No
5xx A temporary problem on the verification side. Retry with exponential backoff. No

Only a delivered verification is charged. Transport errors, server errors and authentication failures are never billed, and any hit that was reserved for such a call is released back to your balance automatically.

Postman & OpenAPI

Both files are generated from this catalogue, so they always match the pages here.

API reference

Every API, grouped by category. Each page has the endpoint, request fields, sample code in four languages and the response structure.

Identity & KYC

Aadhaar Check (Without OTP) POST
/aadhaar-api-without-otp

Validates an Aadhaar number against UIDAI records and returns demographic details of the holder (age range, gender, state, mobile-linkage status). Non-OTP — no consent/OTP flow required.

CIBIL Transunion POST
/cibil-transunion

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

CIBIL Transunion (PDF V2) POST
/cibil-transunion-pdf-v2

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

CIBIL Transunion (PDF) POST
/cibil-transunion-pdf

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

CIBIL Transunion - NEE (PDF) POST
/cibil-transunion-nee-pdf

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

DigiLocker POST
/digilocker

Consent-based document & identity verification (Aadhaar/PAN/DL) via DigiLocker. Generate a candidate consent link; verified documents + eKYC return to the case.

Digilocker POST
/digilocker-kyc

Step 1 of DigiLocker KYC - generates a consent link for the customer to sign in to DigiLocker and share documents. Use the returned transaction_id with the Digilocker Fetch Details API.

Digilocker Fetch Details POST
/digilocker-fetch-details

Step 2 of DigiLocker KYC - after the customer completes consent, fetches the verified Aadhaar e-KYC details using the transaction_id returned by the Digilocker API.

Driving License POST
/driving-license

Verifies a Driving Licence number with date of birth against RTO records and returns holder, validity, address and vehicle class details.

Driving License V2 (DL Validation Plus) POST
/driving-license-v2

DL Validation Plus - enhanced Driving Licence verification returning holder photo, blood group, expiry, status details and vehicle-category wise validity.

Pan Basic POST
/pan-basic

Validate a PAN, match the name and confirm it is active with the tax department.

Pan Detail POST
/pan-aetail

Validates PAN against Income Tax Department records via emver. Checks name, DOB, and PAN status.

Passport POST
/passport

Verifies a passport using the application file number and date of birth and returns passport number, holder name and application/dispatch dates.

UAN Check (v3) POST
/uan-check-v3
Voter ID POST
/voter-id

Verifies a Voter ID (EPIC) number against Election Commission records and returns voter, constituency and polling station details.

Aadhaar Offline eKYC POST
/aadhaar-offline-ekyc

Paperless offline KYC: the person shares a UIDAI-signed XML and you get verified demographics and photo.

Aadhaar eKYC (OTP) POST
/aadhaar-ekyc-otp

Full Aadhaar eKYC with a one-time password on the registered mobile.

Advocate Enrolment Verification POST
/advocate-verification

Verify a lawyer's enrolment number with the state bar council.

CKYC Search & Download POST
/ckyc-search

Look up an existing central KYC record and reuse it with consent.

Death Certificate Verification POST
/death-certificate-verification

Validate a death certificate for claims, succession and account closure.

Doctor Registration Verification POST
/doctor-verification

Verify a medical practitioner's registration with the national or state medical council.

Driving Licence Verification POST
/driving-license-verification

Confirm a driving licence is valid, current and permits the right vehicle class.

Drug Licence Verification POST
/drug-license-verification

Validate a pharmacy or drug distributor licence and its validity.

Nurse Registration Verification POST
/nurse-verification

Confirm a nurse or midwife is registered with the state nursing council.

PAN-Aadhaar Link Check POST
/pan-aadhaar-link

Confirm a PAN is seeded with the given Aadhaar.

Passport Verification POST
/passport-verification

Verify Indian passport details against official records.

RERA Verification POST
/rera-verification

Verify a RERA-registered project or real-estate agent.

Ration Card Verification POST
/ration-card-verification

Confirm a ration card number and the household members listed on it.

Voter ID Verification POST
/voter-id-verification

Validate an EPIC number and retrieve the registered name and constituency.

Business & KYB

CIN Advanced POST
/cin-advanced

Advanced company verification - MCA master data plus registered state/city/pincode, active compliance, CIRP status, charges, present and past directors and related parties.

CIN Basic POST
/cin-basic

Verifies a company CIN / LLPIN against MCA records and returns company master data, charges and directors/signatories.

Challan POST
/challan

Fetches e-Challan (traffic violation) records linked to a vehicle registration number, including offence, amount, payment and court status.

FSSAI POST
/fssai

Verifies an FSSAI licence / registration number and returns emver name, address, licence type and validity status.

GST Advanced POST
/gst-advanced

Advanced GSTIN verification - adds promoters/partners, aggregate turnover, gross total income, e-invoice mandate, additional emver places and contact details.

GST Basic POST
/gst-basic

Verifies a GSTIN and returns taxpayer registration details - legal/trade name, status, constitution, registration date, address and filing status.

RC V1 POST
/rc-v1

Vehicle RC verification - returns owner, vehicle, insurance, PUC, permit and financer details for a vehicle registration number.

RC V2 POST
/rc-v2

Vehicle RC verification (Plus) - enhanced RC lookup with owner, vehicle, insurance, PUC, permit, blacklist and challan details.

Udyam Advanced POST
/udyam-advanced

Step 1 of Udyam Advanced (OTP based) - sends an OTP to the mobile number linked with the Udyam registration. Submit the OTP with the returned reference_id to the Udyam Advanced Submit OTP API.

Udyam Advanced Submit OTP POST
/udyam-advanced-submit-otp

Step 2 of Udyam Advanced - submits the OTP and returns full Udyam details including owner, PAN, contact, bank, emver and financials.

Udyam Basic POST
/udyam-basic

Verifies a Udyam (MSME) registration number and returns emver profile, classification, address, NIC activity and branch details.

Beneficial Ownership (UBO) Check POST
/ubo-check

Trace who ultimately owns and controls a company.

Company (MCA) Lookup POST
/mca-company-lookup

Incorporation status, company type, registered office and filing compliance from the corporate registry.

Company Financials (MCA) POST
/mca-company-financials

Filed financial statements, charges and shareholding from the corporate registry.

Company Name Search POST
/company-search

Find companies and LLPs by name and get their CIN or LLPIN.

Directorship (DIN) Lookup POST
/mca-directorship-lookup

Resolve a person's directorships and DIN status from the corporate registry.

FSSAI Licence Verification POST
/fssai-verification

Verify a food emver licence, its status and validity.

GST Return Filing Status POST
/gst-filing-status

Month-by-month GST return filing history for a GSTIN.

GST Verification with OTP POST
/gst-otp-verification

Consented GST pull: OTP to the registered mobile, then the complete profile and filing history.

GSTIN Verification POST
/gstin-verification

Confirm GST registration, legal name, emver type and filing compliance.

GSTIN by PAN POST
/gstin-by-pan

Discover every GST registration held against a PAN.

IEC Verification POST
/iec-verification

Validate an Import Export Code and the entity behind it.

ITR Filing Status (Section 206AB) POST
/tds-206-compliance

Check whether a vendor is a "specified person" for higher TDS under section 206AB / 206CCA.

MCA Filed Documents POST
/mca-filed-documents

Pull the statutory documents a company has filed with the registrar.

Shop & Establishment Verification POST
/shop-establishment-verification

Confirm a state shop and establishment registration and the emver behind it.

TAN Verification POST
/tan-verification

Validate a Tax Deduction Account Number and resolve the deductor.

Trademark Search POST
/trademark-search

Look up registered and pending trademarks by name, application number or owner.

Udyam / MSME Verification POST
/udyam-verification

Confirm MSME registration, emver type and major activity.

Udyog Aadhaar Verification POST
/udyog-aadhaar-verification

Validate a legacy Udyog Aadhaar (UAM) number for MSMEs that have not migrated to Udyam.

Banking & Credit

Bank Account POST
/bank-account

Verifies a bank account number and IFSC in real time and returns the account holder name with optional name-match score.

CIBIL Transunion NEE V2 (PDF) POST
/cibil-transunion-nee-v2-pdf

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

CIBIL Transunion V2 (PDF) POST
/cibil-transunion-v2-pdf

Reviews an individual’s credit history using a TransUnion CIBIL credit report obtained through an authorized process. The check covers the available credit score, loan and credit card accounts, repayment history, outstanding balances and reported adverse account statuses. Processing is subject to the individual’s consent, permitted purpose and applicable access requirements.

UPI POST
/upi

Verifies a UPI ID / VPA and returns the linked account holder name, with optional name match against the supplied name.

Account Aggregator Data Fetch POST
/account-aggregator

Consented bank statements and financial data through the Account Aggregator framework.

Bank Account Verification POST
/bank-account-verification

Confirm an account exists and belongs to the person or emver you are paying.

Bank Account Verification (Penny-less) POST
/bank-account-pennyless

Confirm an account and holder name without moving any money.

Bank Statement Analysis POST
/bank-statement-analysis

Turn PDF statements into categorised transactions, income and risk indicators.

Credit Report POST
/credit-report

Consent-based credit score and report for lending and financial-role screening.

IFSC & Bank Branch Lookup POST
/ifsc-lookup

Resolve an IFSC to its bank, branch, address and supported payment rails.

Reverse Penny Drop POST
/reverse-penny-drop

Verify bank account ownership by having the person pay one rupee via UPI.

UPI Verification POST
/upi-verification

Resolve a UPI ID to its registered account holder and match the name.

e-NACH Mandate Registration POST
/enach-mandate

Register recurring debit mandates digitally with net-banking, debit-card or Aadhaar authentication.

emver Credit Report POST
/business-credit-report

Commercial bureau report and score for a company or proprietorship.

Workforce & Assets

UAN Advanced POST
/uan-advanced

Retrieve a candidate's emver history from provident fund records using their UAN.

UAN Advanced (PDF) POST
/uan-advanced-pdf
Uan Check (v2) POST
/uan-check-v2

Retrieve a candidate's emver history from provident fund records using their UAN.

Dual emver Check POST
/dual-employment-check

Detect concurrent emver from overlapping provident fund contributions.

ESIC Verification POST
/esic-verification

Confirm an employee's state insurance registration and the employer behind it.

Education Verification POST
/education-verification

Confirm degrees and diplomas with the issuing university or through the national credential repository.

Employer Establishment Search POST
/employer-search

Find a company's provident fund establishment record and confirm it is a real employer.

FASTag Verification POST
/fastag-verification

Confirm a vehicle's FASTag status and issuing bank from its registration number.

Form 16 Verification POST
/form-16-verification

Validate a Form 16 against the TDS records it claims to reflect.

ICAI Membership Verification POST
/icai-verification

Confirm a Chartered Accountant's membership number, status and type.

ICSI Membership Verification POST
/icsi-verification

Verify a Company Secretary's membership with the Institute of Company Secretaries of India.

Income Verification POST
/income-verification

Verify declared income from tax filings and salary credits with the person's consent.

National Permit Verification POST
/national-permit-verification

Validate a commercial vehicle's national permit and its validity period.

UAN Lookup POST
/uan-lookup

Find a person's Universal Account Number from their mobile or PAN.

Vehicle Challan Check POST
/vehicle-challan

Pending and paid traffic challans for a vehicle or driving licence.

Vehicle Insurance Verification POST
/vehicle-insurance-verification

Confirm a vehicle is insured, by whom and until when.

Vehicle RC Verification POST
/rc-verification

Verify a vehicle registration and its owner from the national vehicle registry.

emver Verification (Employer Confirmation) POST
/employment-verification

Direct confirmation of tenure, designation and exit reason from the previous employer.