Mobile Verification

3 endpoints · Core API

This API offers seamless authentication of mobile numbers without the need for OTP verification, ensuring swift and hassle-free validation. This process verifies mobile numbers instantly, enhancing user experience and reducing friction in the onboarding process.

Benefits include: -

1. Enhanced User Experience: Simplifies the verification process for users.

2. Time Efficiency: Saves time by eliminating the OTP verification step.

3. Increased Conversion Rates: Reduces dropout rates during registration.

4. Improved Security: Ensures reliable verification without compromising security.

What you can do

This API verifies the current status and connection type (Prepaid/Postpaid) of a mobile number, ensuring accurate authentication of mobile connections for various operational purposes.

POST

/api/v1/MobileVerification/otp

#

Mobile Verification with OTP

docs.signcare.io/core/api/mobile/mobile-verification/#post-api-v1-mobileverification-otp

Step 1 of 2. Request body: mobile (required) is a 10-digit Indian mobile number without country code, starting with 6, 7, 8 or 9. consent and consent_text are required; request_id is optional and is your own reference. Use the request_id returned in data with the OTP in POST /api/v1/MobileVerification/details.

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
  • consent
    stringrequired
    Required. The end user's consent to this verification. Send `Y`.
    minLength 1default Y
  • consent_text
    stringrequired
    Required. The consent statement shown to the end user. Send the default text from the sample.
    minLength 1default I hear by declare my consent agreeme…
  • request_id
    stringoptional
    Optional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.
    nullable
  • mobile
    stringrequired
    Required. 10-digit Indian mobile number without country code, starting with 6, 7, 8 or 9. An OTP is sent to this number.
    length 10pattern ^[6-9]\d{9}$default 9876543210
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "mobile": "9876543210" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model returned after initiating the mobile OTP verification.
    2 fields
    • message
      stringoptional
      Gets or sets the status message of the OTP request.
      nullable
    • request_id
      stringoptional
      Gets or sets the unique request identifier used for subsequent OTP validation.
      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": { "message": "string", "request_id": "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/MobileVerification/otp' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "mobile": "9876543210" }'
POST

/api/v1/MobileVerification/lookup

#

Mobile Verification (OTP less)

docs.signcare.io/core/api/mobile/mobile-verification/#post-api-v1-mobileverification-lookup

Request body: mobile_number (required, note the underscore) is a 10-digit Indian mobile number without country code, starting with 6, 7, 8 or 9. consent and consent_text are required; request_id is optional.

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
  • consent
    stringrequired
    Required. The end user's consent to this verification. Send `Y`.
    minLength 1default Y
  • consent_text
    stringrequired
    Required. The consent statement shown to the end user. Send the default text from the sample.
    minLength 1default I hear by declare my consent agreeme…
  • request_id
    stringoptional
    Optional. Your own id to correlate this call in your logs. A unique id is generated if you leave it out.
    nullable
  • mobile_number
    stringrequired
    Required. 10-digit Indian mobile number without country code, starting with 6, 7, 8 or 9.
    length 10pattern ^[6-9]\d{9}$default 9876543210
Sample request body
{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "mobile_number": "9876543210" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model for the OTP-less Mobile Lookup.
    12 fields
    • is_number_valid
      booleanoptional
      Gets or sets whether the number is a valid, allocated mobile number.
    • subscriber_status
      stringoptional
      Gets or sets the subscriber status reported by the operator (for example "CONNECTED").
      nullable
    • connection_type
      stringoptional
      Gets or sets the connection type — "prepaid" or "postpaid".
      nullable
    • is_roaming
      booleanoptional
      Gets or sets whether the number is currently roaming.
    • subscriber_name
      stringoptional
      Gets or sets the name the connection is registered against.
      nullable
    • alternate_number
      stringoptional
      Gets or sets the alternate contact number on record, when the operator publishes one.
      nullable
    • connection_status_code
      stringoptional
      Gets or sets the connection status code (for example "DELIVERED").
      nullable
    • connection_status_error_code_id
      stringoptional
      Gets or sets the operator error code explaining a non-delivered connection status. Empty when the lookup succeeded normally.
      nullable
    • msisdn
      objectoptional
      Represents the normalised mobile number and the network codes that identify its operator.
      6 fields
      • msisdn
        stringoptional
        Gets or sets the number in international format (for example "+919971817172").
        nullable
      • type
        stringoptional
        Gets or sets the line type (for example "MOBILE").
        nullable
      • mcc
        stringoptional
        Gets or sets the Mobile Country Code ("404" for India).
        nullable
      • mnc
        stringoptional
        Gets or sets the Mobile Network Code identifying the operator within the country.
        nullable
      • mcc_mnc
        stringoptional
        Gets or sets the concatenated MCC+MNC operator identifier.
        nullable
      • country_code
        stringoptional
        Gets or sets the ISO country code of the number.
        nullable
    • current_service_provider
      objectoptional
      Represents a telecom operator and the circle it serves the number from.
      8 fields
      • network_name
        stringoptional
        Gets or sets the operator name (for example "Airtel").
        nullable
      • network_region
        stringoptional
        Gets or sets the telecom circle / region (for example "Delhi").
        nullable
      • network_prefix
        stringoptional
        Gets or sets the numbering-series prefix allocated to this operator.
        nullable
      • mcc
        stringoptional
        Gets or sets the Mobile Country Code.
        nullable
      • mnc
        stringoptional
        Gets or sets the Mobile Network Code.
        nullable
      • country_code
        stringoptional
        Gets or sets the ISO country code.
        nullable
      • country_name
        stringoptional
        Gets or sets the country name.
        nullable
      • country_prefix
        stringoptional
        Gets or sets the international dialling prefix (for example "+91").
        nullable
    • original_service_provider
      objectoptional
      Represents a telecom operator and the circle it serves the number from.
      8 fields
      • network_name
        stringoptional
        Gets or sets the operator name (for example "Airtel").
        nullable
      • network_region
        stringoptional
        Gets or sets the telecom circle / region (for example "Delhi").
        nullable
      • network_prefix
        stringoptional
        Gets or sets the numbering-series prefix allocated to this operator.
        nullable
      • mcc
        stringoptional
        Gets or sets the Mobile Country Code.
        nullable
      • mnc
        stringoptional
        Gets or sets the Mobile Network Code.
        nullable
      • country_code
        stringoptional
        Gets or sets the ISO country code.
        nullable
      • country_name
        stringoptional
        Gets or sets the country name.
        nullable
      • country_prefix
        stringoptional
        Gets or sets the international dialling prefix (for example "+91").
        nullable
    • roaming_service_provider
      objectoptional
      Represents a telecom operator and the circle it serves the number from.
      8 fields
      • network_name
        stringoptional
        Gets or sets the operator name (for example "Airtel").
        nullable
      • network_region
        stringoptional
        Gets or sets the telecom circle / region (for example "Delhi").
        nullable
      • network_prefix
        stringoptional
        Gets or sets the numbering-series prefix allocated to this operator.
        nullable
      • mcc
        stringoptional
        Gets or sets the Mobile Country Code.
        nullable
      • mnc
        stringoptional
        Gets or sets the Mobile Network Code.
        nullable
      • country_code
        stringoptional
        Gets or sets the ISO country code.
        nullable
      • country_name
        stringoptional
        Gets or sets the country name.
        nullable
      • country_prefix
        stringoptional
        Gets or sets the international dialling prefix (for example "+91").
        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": { "is_number_valid": false, "subscriber_status": "string", "connection_type": "string", "is_roaming": false, "subscriber_name": "string", "alternate_number": "string", "connection_status_code": "string", "connection_status_error_code_id": "string", "msisdn": { "msisdn": "string", "type": "string", "mcc": "string", "mnc": "string", "mcc_mnc": "string", "country_code": "string" }, "current_service_provider": { "network_name": "string", "network_region": "string", "network_prefix": "string", "mcc": "string", "mnc": "string", "country_code": "string", "country_name": "string", "country_prefix": "string" }, "original_service_provider": { "network_name": "string", "network_region": "string", "network_prefix": "string", "mcc": "string", "mnc": "string", "country_code": "string", "country_name": "string", "country_prefix": "string" }, "roaming_service_provider": { "network_name": "string", "network_region": "string", "network_prefix": "string", "mcc": "string", "mnc": "string", "country_code": "string", "country_name": "string", "country_prefix": "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/MobileVerification/lookup' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "consent": "Y", "consent_text": "I hear by declare my consent agreement for fetching my information via SignCare API", "mobile_number": "9876543210" }'
POST

/api/v1/MobileVerification/details

#

Mobile Verification with details

docs.signcare.io/core/api/mobile/mobile-verification/#post-api-v1-mobileverification-details

Step 2 of 2. Request body: otp (required) is the OTP received on the mobile number (digits only, up to 6) and request_id (required) is the request_id returned in data by POST /api/v1/MobileVerification/otp. This request does not take consent fields.

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
  • otp
    stringrequired
    Required. OTP received on the mobile number. Digits only, 1 to 6 characters.
    minLength 1pattern ^\d{1,6}$default 106000
  • request_id
    stringrequired
    Required. The `request_id` returned inside `data` by the OTP request. Do not reuse the `request_id` you sent with the OTP request.
    minLength 1
Sample request body
{ "otp": "106000", "request_id": "string" }

Responses

200OK
  • success
    booleanoptional
    No description.
  • statusCode
    integer (int32)optional
    No description.
    default 200
  • message
    stringoptional
    No description.
    nullabledefault XXXXX
  • data
    objectoptional
    Response model containing comprehensive mobile verification details.
    3 fields
    • sim_details
      objectoptional
      Represents detailed SIM information including activation and activity details.
      5 fields
      • last_activity_date
        anyoptional
        Gets or sets the last activity date on the SIM.
        nullable
      • provider
        stringoptional
        Gets or sets the mobile service provider name.
        nullable
      • otp_validated
        booleanoptional
        Gets or sets whether the OTP was successfully validated.
      • type
        stringoptional
        Gets or sets the SIM type (e.g., prepaid, postpaid).
        nullable
      • activation_date
        stringoptional
        Gets or sets the SIM activation date.
        nullable
    • identity
      objectoptional
      Represents the identity details of the mobile number owner.
      3 fields
      • name
        stringoptional
        Gets or sets the full name of the person.
        nullable
      • gender
        stringoptional
        Gets or sets the gender of the person.
        nullable
      • date_of_birth
        stringoptional
        Gets or sets the date of birth of the person.
        nullable
    • contact
      objectoptional
      Represents the contact details of the mobile number owner.
      4 fields
      • address
        stringoptional
        Gets or sets the address of the contact.
        nullable
      • email_id
        anyoptional
        Gets or sets the email address of the contact.
        nullable
      • alt_contact
        stringoptional
        Gets or sets the alternate contact number.
        nullable
      • work_email
        stringoptional
        Gets or sets the work email address.
        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": { "sim_details": { "last_activity_date": null, "provider": "string", "otp_validated": false, "type": "string", "activation_date": "string" }, "identity": { "name": "string", "gender": "string", "date_of_birth": "string" }, "contact": { "address": "string", "email_id": null, "alt_contact": "string", "work_email": "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/MobileVerification/details' \ -H 'X-API-KEY: YOUR_API_KEY' \ -H 'X-API-APP-ID: YOUR_APP_ID' \ -H 'Content-Type: application/json' \ -d '{ "otp": "106000", "request_id": "string" }'