Aadhaar OVSE (Offline Verification)

8 endpoints · Core API

What is it?

Aadhaar OVSE (Offline Verification Seeking Entity) enables privacy-first identity verification using UIDAI's official Aadhaar App. Your end-users authenticate via face scan in the Aadhaar App and consent to share verified identity details. The full Aadhaar number is never collected or stored — at most the last 4 digits, and only when you explicitly request aadhaar_last_4. SignCare holds the UIDAI OVSE license, so you don't need your own registration.


Quick Start (3 Steps)

Step 1: Create verification request

POST /api/v1/aadhaar-ovse/init

Pass the claims you need as a simple array of names and the channel:

{
  "claims": ["name", "dob", "gender", "photo", "address", "pincode", "masked_mobile"],
  "channel": "web",
  "language": "english",
  "face_auth": true,
  "webhook_url": "https://yourapp.com/webhook"
}

Response: txnId, intentJwt, requestUrl (for web channel), expiresAt

Step 2: Redirect your user

  • Web-to-App (channel: "web"): Redirect user's browser to the returned requestUrl. Aadhaar App opens on their phone.
  • Cross-Device QR (channel: "qr"): Call POST /qr-intent with the txnId, then render the returned qrPayload as a QR code.
  • App-to-App (channel: "app"): Use the intentJwt to launch Aadhaar App via Android Intent or iOS URL scheme.

User authenticates via face scan and consents to share their details.

Step 3: Receive verified claims

  • Webhook (recommended): We POST verified claims to your webhookUrl automatically.
  • Polling (fallback): GET /api/v1/aadhaar-ovse/result/{txnId} — returns pending: true until done.

Available Claims

Pass any of these values in the claims array:

Identity: name, local_name, photo, dob, gender, age_above_18, age_above_50, age_above_60, age_above_75, nri_status, care_of, enrolment_number, enrolment_date, credential_date

Address: address, regional_address, building, locality, street, landmark, vtc, sub_district, district, state, pincode, po_name

Contact: mobile, masked_mobile, email, masked_email

Aadhaar: aadhaar_last_4 — the last 4 digits of the Aadhaar number (UIDAI request field 42). This is the only Aadhaar-number-derived field OVSE returns; the full number is never shared.

Common combinations:

  • Basic KYC: ["name", "dob", "photo", "address", "pincode"]
  • Full KYC: ["name", "dob", "gender", "photo", "address", "pincode", "masked_mobile"]
  • Age verification only: ["age_above_18"]
  • Address verification: ["name", "address", "state", "district", "pincode"]

Languages

Pass language name or code: english (default), hindi, marathi, gujarati, tamil, telugu, bengali, kannada, malayalam, punjabi, urdu, assamese, oriya, nepali, or code 1-23


Webhook Payload

POSTed to your webhookUrl as JSON:

{
  "success": true,
  "data": {
    "txnId": "94f63917-...",
    "verificationPassed": true,
    "verifiedClaims": {
      "residentName": "RAM KUMAR",
      "dob": "1990-01-15",
      "gender": "M",
      "address": "123, MG Road, Pune",
      "pincode": "411001"
    },
    "verifiedAt": "2026-04-13T10:18:30Z"
  }
}

Choosing the Right Channel

The channel you pass to /init should match how your end-users encounter your product, not how your backend works.

web — your user is on a mobile browser

Best when your product is a mobile web app (fintech KYC form, loan application, signup flow, embedded iframe).

  • You call /init with channel: "web".
  • We return requestUrl — open it in the user's mobile browser (redirect, popup, or new tab).
  • Our verify page detects the platform and fires the right deep link: intent://... on Android, pehchaan://... on iOS.
  • Aadhaar Pehchaan opens, user does face auth, you get a webhook.

Don't use this for desktop browsers — desktop users have no Pehchaan app to launch. Use qr instead.

qr — your user is at a counter, kiosk, or desktop

Best for physical venues, branches, hotel reception, retail counter, conference desks, or any desktop-screen flow.

  • You call /init with channel: "qr".
  • We return requestUrl — render it as a QR code on your screen using any QR library.
  • The QR follows UIDAI's spec format (https://maadhaar.com/getIntent?value=...) so it works two ways:
    1. End-user opens their phone camera → scans → Pehchaan opens automatically.
    2. End-user opens Aadhaar Pehchaan → taps "Scan QR" inside the app → reads the same QR.
  • Either path lands on the same txnId and you get a webhook.

Multi-guest variant: if you need one persistent QR for many guests (hotel weekend sign, conference welcome banner), use Event QR Mode — /events instead of /init. One QR, unlimited fresh transactions.

app — your user is inside your native mobile app

Best when you have your own Android or iOS app that needs to verify the user mid-flow (banking onboarding, wallet KYC, driver verification).

  • You call /init with channel: "app", plus your app_id (Android package id) and app_signature (Base64 SHA-256 of your signing cert).
  • Android: we return aadhaarAppUri — an intent: URI your Android code fires via startActivity().
  • iOS: use the intentJwt from the response and open the URL scheme yourself:
    UIApplication.shared.open(URL(string: "pehchaan://in.gov.uidai.pehchaan?req=\(intentJwt)")!)
    
  • Pehchaan opens directly inside your app, returns the user when verification finishes.

Channel cheat sheet

Your productChannelWhat you renderEnd user does
Mobile web appwebnothing — just redirectPhone browser → Pehchaan opens automatically
Branch / kiosk / desktop siteqra QR imagePhone camera or Pehchaan in-app scan
Hotel / event with many guestsEvent QRone persistent QREach guest scans the same QR
Native Android appappnothing — fire intentPehchaan opens inside your app
Native iOS appappnothing — open URL schemePehchaan opens inside your app

Trial Center vs Production

The "Running Trial on Aadhaar OVSE" screen inside the SignCare portal is a developer sandbox. It exists to help you:

  • Pick claims and a channel, then see exactly what /init returns.
  • Test your webhook URL end-to-end with a real verification.
  • Inspect the verifiedClaims JSON shape so you know what fields to map.
  • Try Event QR mode with a live registrations dashboard before printing anything.

The trial center is not for your end users. Your real users never see the SignCare portal. In production, your own backend calls this External API directly with your X-API-KEY and X-API-APP-ID headers, and you render the verify URL or QR inside your product. The trial center just lets you verify the wiring before writing integration code.

Trial center transactions debit credits exactly like production — keep that in mind while testing.


Event QR Mode — One QR for Many Guests

Use Event QR when you need to verify many people at a venue without knowing who's coming. You print one QR code — each guest scans it and gets their own fresh Aadhaar verification.

Best for: hotel check-in, conference registration, branch walk-in, exhibitions, field operations.

Event QR Quick Start (3 steps)

Step 1: Create an event POST /api/v1/aadhaar-ovse/events

{
  "name": "Hotel ABC Conference — March 5",
  "claims": ["name", "dob", "photo", "masked_mobile"],
  "language": "english",
  "max_guests": 200,
  "expires_at": "2026-03-06T23:59:59Z",
  "webhook_url": "https://yourapp.com/webhooks/event-guests"
}

Response: event_id, qr_url (print this as a QR code)

Step 2: Print the QR and display at venue. Guests scan with phone camera → Aadhaar App opens automatically → face auth → consent.

Step 3: Receive a webhook per verified guest. Same payload shape as single verification. Optionally poll GET /events/{eventId}/registrations for a live guest list.

Event management endpoints

  • GET /events/{eventId} — check status, registration count, capacity
  • GET /events/{eventId}/registrations?page=1&page_size=50 — live guest list with verified claims
  • PATCH /events/{eventId} — disable, raise cap, or extend expiry mid-event

Event QR — Key points

  • 1 credit per verified guest — same rate as single /init
  • Abandoned scans (guest walks away before face auth) consume 1 credit but don't count toward max_guests
  • max_guests caps successful verifications only, not total scans
  • When credits run out, the QR gracefully shows "event unavailable" — no hard failure
  • Disable an event instantly: PATCH /events/{id} with { "is_active": false }

Error Codes

  • 400 — Unknown claims / invalid channel: check the claims list above
  • 401 — Unauthorized: check X-API-KEY and X-API-APP-ID headers
  • 402 — Insufficient credits: purchase more via SignCare portal
  • 404 — Transaction or event not found
  • 409 — Event at capacity (max_guests reached)
  • 410 — Transaction expired (15 min window) or event expired

Benefits

  • No OVSE license needed — use SignCare's
  • No full Aadhaar number collected — privacy by design (last 4 digits available on request)
  • UIDAI digitally signed data (SD-JWT) — tamper-proof
  • Face biometric authentication — prevents impersonation
  • 3 API calls to verify an identity — simple integration
  • Event QR mode — one QR for unlimited guests — hospitality, conference, branch walk-in
POST

/api/v1/aadhaar-ovse/init

#

Step 1: Create an OVSE verification request. Specify which Aadhaar claims you need (name, DOB, address, etc.) and the invocation channel (web/qr/app). Returns a transaction ID, intent JWT, and request URL to redirect your end-user.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#post-api-v1-aadhaar-ovse-init

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • claims
    array<string>required
    Required. List of Aadhaar claims you want to verify, at least one. Use the plain claim names below (case-insensitive); an unknown name is rejected with 400. Available claims: "name", "dob", "gender", "photo", "address", "pincode", "state", "district", "mobile", "masked_mobile", "email", "masked_email", "age_above_18", "age_above_50", "age_above_60", "age_above_75", "care_of", "vtc", "locality", "building", "street", "landmark", "sub_district", "po_name", "regional_address", "local_name", "nri_status", "enrolment_number", "enrolment_date", "credential_date", "aadhaar_last_4" "aadhaar_last_4" returns the last 4 digits of the Aadhaar number (UIDAI request field 42). It is the only Aadhaar-number-derived field available; the full number is never shared.
    nullable
  • request_id
    stringoptional
    Optional. Your own request ID for tracking; a new one is generated when omitted.
    nullable
  • channel
    stringoptional
    Optional. Invocation method: "web" (browser redirect), "qr" (QR code for kiosk/desktop), "app" (mobile app direct launch). Lowercase only; any other value is rejected with 400. Default: "web".
    nullable
  • language
    stringoptional
    Optional. Language for claims, as a name (case-insensitive) such as "english" (default), "hindi", "marathi", "gujarati", "tamil", "telugu", "bengali", "kannada", "malayalam", "punjabi", "urdu", "assamese", "oriya", or a code from "1" to "23" sent as a string. An unrecognised value falls back to english.
    nullable
  • face_auth
    booleanoptional
    Optional. Boolean. Require face authentication. Default: true (recommended for security).
  • webhook_url
    stringoptional
    Optional. Your webhook URL where SignCare will POST the verified claims once the user completes verification. When omitted, the webhook URL saved for your app is used if one is configured; otherwise poll the result endpoint.
    nullable
  • app_id
    stringoptional
    Optional. App-to-App only: Android package id of the calling app. Used when channel is "app"; ignored for other channels.
    nullable
  • app_signature
    stringoptional
    Optional. App-to-App only: Base64 SHA-256 of the calling app's signing certificate. Used when channel is "app"; ignored for other channels.
    nullable
  • include_qr_base64
    booleanoptional
    Per-request override for the company-level "Include QR as base64 in API response" toggle. Omit to use the saved company setting.
    nullable
Sample request body
{ "claims": [ "name", "dob", "gender", "photo", "address", "pincode", "masked_mobile" ], "request_id": "string", "channel": "string", "language": "string", "face_auth": false, "webhook_url": "string", "app_id": "string", "app_signature": "string", "include_qr_base64": false }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    6 fields
    • txnId
      stringoptional
      No description.
      nullable
    • requestUrl
      stringoptional
      No description.
      nullable
    • intentJwt
      stringoptional
      No description.
      nullable
    • aadhaarAppUri
      stringoptional
      No description.
      nullable
    • expiresAt
      string (date-time)optional
      No description.
    • qrBase64
      stringoptional
      Base64 PNG of the QR (data URI). Populated when the consumer has IncludeQrBase64 = true and the channel produced a URL (web or qr — not app).
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "txnId": "string", "requestUrl": "string", "intentJwt": "string", "aadhaarAppUri": "string", "expiresAt": "2026-01-01T00:00:00Z", "qrBase64": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/init' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "claims": [ "name", "dob", "gender", "photo", "address", "pincode", "masked_mobile" ], "request_id": "string", "channel": "string", "language": "string", "face_auth": false, "webhook_url": "string", "app_id": "string", "app_signature": "string", "include_qr_base64": false }'
POST

/api/v1/aadhaar-ovse/qr-intent

#

Step 1b (QR only): Generate a QR code payload for cross-device verification. Call this after /init with channel 'qr'. Render the returned payload as a QR code — user scans it with their phone to open Aadhaar App.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#post-api-v1-aadhaar-ovse-qr-intent

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • txn_id
    stringrequired
    Required. Transaction ID (`txn_id`) returned by /init. It must belong to your company and not be expired.
    nullable
  • include_qr_base64
    booleanoptional
    Optional. Boolean. Per-request override for the company-level "Include QR as base64 in API response" setting. Omit to use the saved company setting.
    nullable
Sample request body
{ "txn_id": "string", "include_qr_base64": false }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    3 fields
    • txnId
      stringoptional
      No description.
      nullable
    • qrPayload
      stringoptional
      No description.
      nullable
    • qrBase64
      stringoptional
      Base64 PNG of the QR (data URI). Only populated when the consumer has IncludeQrBase64 = true.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "txnId": "string", "qrPayload": "string", "qrBase64": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/qr-intent' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "txn_id": "string", "include_qr_base64": false }'
POST

/api/v1/aadhaar-ovse/app-callback

#

App-to-App courier endpoint. For channel "app", UIDAI Aadhaar Pehchaan returns the SD-JWT credential to the calling Android app via Intent extras instead of POSTing to the registered callback URL. The calling app must forward the credential here so SignCare's backend can verify the SD-JWT signature and disclosures, store the verified claims, and (if configured) fire the consumer's webhook. Returns the verified-claims payload directly — no polling required for App-to-App.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#post-api-v1-aadhaar-ovse-app-callback

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • txn_id
    stringrequired
    Required. Transaction ID (`txn_id`) returned by /init for the "app" channel.
    nullable
  • credential
    stringrequired
    Required. SD-JWT credential returned by the Aadhaar app through the Android Intent extras (format: a.b.c~d1~d2). It must belong to the given transaction.
    nullable
Sample request body
{ "txn_id": "string", "credential": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    6 fields
    • txnId
      stringoptional
      No description.
      nullable
    • pending
      booleanoptional
      No description.
    • verificationPassed
      booleanoptional
      No description.
    • verifiedClaims
      objectoptional
      No description.
      nullable
    • verifiedAt
      string (date-time)optional
      No description.
      nullable
    • message
      stringoptional
      No description.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "txnId": "string", "pending": false, "verificationPassed": false, "verifiedClaims": {}, "verifiedAt": "2026-01-01T00:00:00Z", "message": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/app-callback' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "txn_id": "string", "credential": "string" }'
GET

/api/v1/aadhaar-ovse/result/{txnId}

#

Step 3: Poll for verification result. Returns pending status while user hasn't completed verification, or the verified claims once done. Use this as a fallback if you prefer polling over webhooks.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#get-api-v1-aadhaar-ovse-result-txnid

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.

Path parameters

  • txnId
    stringrequired
    Required. The txn_id returned by /init.

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    6 fields
    • txnId
      stringoptional
      No description.
      nullable
    • pending
      booleanoptional
      No description.
    • verificationPassed
      booleanoptional
      No description.
    • verifiedClaims
      objectoptional
      No description.
      nullable
    • verifiedAt
      string (date-time)optional
      No description.
      nullable
    • message
      stringoptional
      No description.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "txnId": "string", "pending": false, "verificationPassed": false, "verifiedClaims": {}, "verifiedAt": "2026-01-01T00:00:00Z", "message": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X GET 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/result/{txnId}' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID'
POST

/api/v1/aadhaar-ovse/events

#

[Event QR Mode] Create a stable event QR code for multi-guest Aadhaar verification. Use this when you need to verify many users at once — hotel check-ins, conference registrations, branch walk-ins, kiosks. Instead of calling /init for each person, you create ONE event, print its QR URL, and each guest scans to get their own fresh Aadhaar verification. Flow: 1. Call this endpoint → receive event_id and qr_url. 2. Encode qr_url as a QR code (any QR generator works) and print/display at your venue. 3. Guests scan with Android phone camera → Aadhaar Pehchaan app opens → face auth → consent. 4. You receive one webhook POST per successful guest (same payload as /init webhooks). 5. Optionally poll GET /events/{event_id}/registrations for a live guest list. Credits: each successful guest registration debits one Aadhaar OVSE credit, same as /init.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#post-api-v1-aadhaar-ovse-events

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Body parameters

application/json
  • name
    stringrequired
    Required. Display name shown on the guest's verify page (e.g. "Hotel ABC Conference").
    nullable
  • claims
    array<string>required
    Required. Aadhaar claims to request from each guest, at least one. Same claim names as /init (case-insensitive), for example "name", "dob", "gender", "photo", "address", "pincode", "state", "district", "mobile", "masked_mobile", "email", "masked_email", "age_above_18", "aadhaar_last_4". An unknown name is rejected with 400.
    nullable
  • language
    stringoptional
    Optional. Language for claims, as a name such as "english" (default), "hindi", "marathi", or a code from "1" to "23" sent as a string. An unrecognised value falls back to english.
    nullable
  • webhook_url
    stringoptional
    Optional. URL that receives one POST per successful guest registration. When omitted, the webhook URL saved for your app is used if one is configured.
    nullable
  • max_guests
    integer (int32)optional
    Optional. Maximum successful registrations; integer greater than 0. Omit for unlimited (capped by wallet balance).
    nullable
  • expires_at
    string (date-time)optional
    Optional. ISO 8601 UTC date-time; scans are rejected after this time. Must be in the future. Omit for no expiry.
    nullable
  • logo_url
    stringoptional
    Optional. Your brand logo URL shown on the guest's verify page.
    nullable
  • entity_name
    stringoptional
    Optional. Your entity name shown on the guest's verify page (e.g. "Hotel ABC").
    nullable
  • include_qr_base64
    booleanoptional
    Optional. Boolean. Per-request override for the company-level "Include QR as base64 in API response" setting. Omit to use the saved company setting.
    nullable
Sample request body
{ "name": "string", "claims": [ "name", "dob", "gender", "photo", "masked_mobile" ], "language": "string", "webhook_url": "string", "max_guests": 0, "expires_at": "2026-01-01T00:00:00Z", "logo_url": "string", "entity_name": "string", "include_qr_base64": false }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    11 fields
    • eventId
      stringoptional
      No description.
      nullable
    • name
      stringoptional
      No description.
      nullable
    • qrUrl
      stringoptional
      No description.
      nullable
    • isActive
      booleanoptional
      No description.
    • maxGuests
      integer (int32)optional
      No description.
      nullable
    • registrationCount
      integer (int32)optional
      No description.
    • expiresAt
      string (date-time)optional
      No description.
      nullable
    • logoUrl
      stringoptional
      No description.
      nullable
    • entityName
      stringoptional
      No description.
      nullable
    • createdAt
      string (date-time)optional
      No description.
      nullable
    • qrBase64
      stringoptional
      Base64 PNG of the event QR (data URI). Only populated when the consumer has IncludeQrBase64 = true.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "eventId": "string", "name": "string", "qrUrl": "string", "isActive": false, "maxGuests": 0, "registrationCount": 0, "expiresAt": "2026-01-01T00:00:00Z", "logoUrl": "string", "entityName": "string", "createdAt": "2026-01-01T00:00:00Z", "qrBase64": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X POST 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/events' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "name": "string", "claims": [ "name", "dob", "gender", "photo", "masked_mobile" ], "language": "string", "webhook_url": "string", "max_guests": 0, "expires_at": "2026-01-01T00:00:00Z", "logo_url": "string", "entity_name": "string", "include_qr_base64": false }'
GET

/api/v1/aadhaar-ovse/events/{eventId}

#

[Event QR Mode] Get event details — name, status, registration count, cap, expiry. Use this to check how many guests have registered so far, whether the event is still active, and whether it has hit its max_guests cap. Useful for a live event dashboard. Returns the same qr_url from creation — you can regenerate the QR at any time from it.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#get-api-v1-aadhaar-ovse-events-eventid

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.

Path parameters

  • eventId
    stringrequired
    Required. The event_id returned when the event was created.

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    11 fields
    • eventId
      stringoptional
      No description.
      nullable
    • name
      stringoptional
      No description.
      nullable
    • qrUrl
      stringoptional
      No description.
      nullable
    • isActive
      booleanoptional
      No description.
    • maxGuests
      integer (int32)optional
      No description.
      nullable
    • registrationCount
      integer (int32)optional
      No description.
    • expiresAt
      string (date-time)optional
      No description.
      nullable
    • logoUrl
      stringoptional
      No description.
      nullable
    • entityName
      stringoptional
      No description.
      nullable
    • createdAt
      string (date-time)optional
      No description.
      nullable
    • qrBase64
      stringoptional
      Base64 PNG of the event QR (data URI). Only populated when the consumer has IncludeQrBase64 = true.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "eventId": "string", "name": "string", "qrUrl": "string", "isActive": false, "maxGuests": 0, "registrationCount": 0, "expiresAt": "2026-01-01T00:00:00Z", "logoUrl": "string", "entityName": "string", "createdAt": "2026-01-01T00:00:00Z", "qrBase64": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X GET 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/events/{eventId}' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID'
PATCH

/api/v1/aadhaar-ovse/events/{eventId}

#

[Event QR Mode] Update an in-flight event — disable it, raise the cap, or extend the window. Common operations: - Immediately stop accepting new scans: { "is_active": false } - Let in more guests than originally planned: { "max_guests": 250 } - Event running late, extend by 2 hours: { "expires_at": "2026-03-05T22:00:00Z" } - Replace webhook for future registrations: { "webhook_url": "https://..." } Only send the fields you want to change — omitted fields are left unchanged. Note: max_guests must be greater than 0 and expires_at must be a future time.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#patch-api-v1-aadhaar-ovse-events-eventid

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.
  • Content-Type
    stringrequired
    application/json

Path parameters

  • eventId
    stringrequired
    Required. The event_id returned when the event was created.

Body parameters

application/json
  • is_active
    booleanoptional
    Optional. Set to false to immediately stop accepting new registrations, or true to resume.
    nullable
  • max_guests
    integer (int32)optional
    Optional. New guest cap; integer greater than 0.
    nullable
  • expires_at
    string (date-time)optional
    Optional. New expiry as an ISO 8601 UTC date-time. Must be in the future.
    nullable
  • webhook_url
    stringoptional
    Optional. New webhook URL for future registrations.
    nullable
Sample request body
{ "is_active": false, "max_guests": 0, "expires_at": "2026-01-01T00:00:00Z", "webhook_url": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    11 fields
    • eventId
      stringoptional
      No description.
      nullable
    • name
      stringoptional
      No description.
      nullable
    • qrUrl
      stringoptional
      No description.
      nullable
    • isActive
      booleanoptional
      No description.
    • maxGuests
      integer (int32)optional
      No description.
      nullable
    • registrationCount
      integer (int32)optional
      No description.
    • expiresAt
      string (date-time)optional
      No description.
      nullable
    • logoUrl
      stringoptional
      No description.
      nullable
    • entityName
      stringoptional
      No description.
      nullable
    • createdAt
      string (date-time)optional
      No description.
      nullable
    • qrBase64
      stringoptional
      Base64 PNG of the event QR (data URI). Only populated when the consumer has IncludeQrBase64 = true.
      nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "eventId": "string", "name": "string", "qrUrl": "string", "isActive": false, "maxGuests": 0, "registrationCount": 0, "expiresAt": "2026-01-01T00:00:00Z", "logoUrl": "string", "entityName": "string", "createdAt": "2026-01-01T00:00:00Z", "qrBase64": "string" }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X PATCH 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/events/{eventId}' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "is_active": false, "max_guests": 0, "expires_at": "2026-01-01T00:00:00Z", "webhook_url": "string" }'
GET

/api/v1/aadhaar-ovse/events/{eventId}/registrations

#

[Event QR Mode] Paginated list of guests who have verified at this event. Each item includes the guest's txn_id, verification status, and their disclosed Aadhaar claims (name, DOB, photo, address, etc. — whatever you requested at event creation). Results are ordered newest-first (most recent registrations appear first). Use page + page_size to paginate. Both are optional query parameters: page defaults to 1 (minimum 1); page_size defaults to 50 and is limited to 1-200 (values outside that range are adjusted, not rejected). Only guests whose verification was successfully completed are included (verification_passed: true). Abandoned scans (user walked away before completing face auth) do not appear here.

docs.signcare.io/core/api/aadhaar/aadhaar-ovse-offline-verification/#get-api-v1-aadhaar-ovse-events-eventid-registrations

Headers

  • X-API-KEY
    stringrequired
    Your secret API key for the environment you are calling (Stage and Live use different keys).
  • X-API-APP-ID
    stringrequired
    The App ID issued together with the key.

Path parameters

  • eventId
    stringrequired
    Required. The event_id returned when the event was created.

Query parameters

  • page
    integer (int32)optional
    Optional. Page number, starting at 1. Default 1.
    default 1
  • page_size
    integer (int32)optional
    Optional. Items per page, 1 to 200. Default 50.
    default 50

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    No description.
    5 fields
    • eventId
      stringoptional
      No description.
      nullable
    • total
      integer (int32)optional
      No description.
    • page
      integer (int32)optional
      No description.
    • pageSize
      integer (int32)optional
      No description.
    • items
      array<object>optional
      No description.
      nullable
      Each item: 4 fields
      • txnId
        stringoptional
        No description.
        nullable
      • verificationPassed
        booleanoptional
        No description.
      • verifiedClaims
        objectoptional
        No description.
        nullable
      • registeredAt
        string (date-time)optional
        No description.
        nullable
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • isBillable
    booleanoptional
    Whether this request was charged: true if it was, false if not. Errors always show false. Flows that finish later (ITR Fetch, SHCIL eStamp, DigiLocker, eSign) show false here, because the charge is made when the result is ready. eSign charges each signer when they complete signing. DigiLocker deducts the credit when the link is created and refunds it automatically if the link expires before the user completes it.
Example
{ "success": false, "statusCode": 200, "message": "XXXXX", "data": { "eventId": "string", "total": 0, "page": 0, "pageSize": 0, "items": [ { "txnId": "string", "verificationPassed": false, "verifiedClaims": {}, "registeredAt": "2026-01-01T00:00:00Z" } ] }, "messages": [ "string" ], "request_id": "string", "isBillable": false }
400Bad Request
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 400
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 400 }
401Unauthorized
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 401
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 401 }
500Internal Server Error
  • data
    objectoptional
    No description.
  • messages
    array<string>optional
    No description.
    nullable
  • request_id
    stringoptional
    No description.
    nullable
  • success
    booleanoptional
    No description.
    default false
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • isBillable
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 500
Example
{ "data": {}, "messages": [ "string" ], "request_id": "string", "success": false, "message": "XXXXX", "isBillable": false, "statusCode": 500 }
Code samplescurl · Node.js · Python
Stage: uat-ext.signcare.io
curl -X GET 'https://uat-ext.signcare.io/api/v1/aadhaar-ovse/events/{eventId}/registrations' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID'