{"openapi":"3.1.0","info":{"title":"Techinnoverz Verification API","version":"1.0.0","description":"Techinnoverz Verification API is a REST API for identity, credit, banking, business and vehicle verification in India: Aadhaar OTP, PAN, Voter ID, driving licence, CIBIL, CRIF, Experian and Equifax credit reports, bank account (penny drop), GST and vehicle RC and challan checks. One API key, one prepaid wallet, JSON in and JSON out.\n\nYou are charged only on successful hits. Failed, no-data and error calls are free.\n\nTest and live keys: There is one base URL. The prefix of your key decides what happens: tz_test_ keys run against sample data, are never charged and never touch your wallet; tz_live_ keys run real checks and are charged. Live keys are issued once your account has been approved for live access. Every response carries livemode, true for a live key and false for a test key. A successful response also carries source and dataAsOf. source is \"provider\" when the data was fetched for your call, and \"stored\" when we answered a repeat of the same lookup from a record we kept of an earlier one; dataAsOf is when the data was fetched from its source. A result served from a kept record is billed the same as any other successful result.\n\nIdempotency and retries: Send an Idempotency-Key header (1 to 128 letters, digits or . _ : -) with every check. Calling again with the same key and the same body returns the same result, marked with the Idempotent-Replayed: true header, and never charges twice. If a call with the key is still running you receive 409 IDEMPOTENCY_IN_PROGRESS with a Retry-After header. The same key with a different body is 422 IDEMPOTENCY_KEY_REUSED. If an earlier attempt failed without charge (SOURCE_ERROR, SOURCE_TIMEOUT or a lost call), retrying with the same key runs the check again. Keys are remembered for 7 days.\n\nFetching a result again: Every response carries a txnId. GET /requests/{txnId} returns the stored response of that transaction, free of charge. If your connection dropped before you received a found result, fetching it (or retrying with the same Idempotency-Key) within 10 minutes delivers it and charges it once; a result you never fetch is not charged. Stored responses are kept for 7 days. For Aadhaar, DigiLocker and credit-bureau checks they are kept for 10 minutes only.\n\nResponse headers: X-Request-Id repeats the txnId. RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset describe your per-key limit, and Retry-After accompanies 409, 429 and 503 responses.\n\nTimeouts and request size: A call that cannot finish within 30 seconds is answered with an error and is not charged. In the rare case that the result is found just after that, it can still be fetched with its txnId and is then charged once. Request bodies are limited to 64 KB, except checks that take photos (face match and face match with liveness), which accept up to 6 MB with JPEG or PNG images of up to about 2 MB each, base64 encoded. Images are never stored.","contact":{"name":"Techinnoverz","url":"https://www.techinnoverz.com"}},"servers":[{"url":"https://verification.techinnoverz.com/api/v1"}],"externalDocs":{"description":"Techinnoverz Verification API documentation","url":"https://verification.techinnoverz.com/api-docs"},"security":[{"apiKey":[]}],"tags":[{"name":"Identity & KYC Verification APIs","description":"Verify an individual's identity against Aadhaar, PAN, Voter ID and driving licence records."},{"name":"Mobile Intelligence APIs","description":"Start from a mobile number to find the name, address, UPI IDs and e-commerce addresses linked to it."},{"name":"Background & Bureau Verification APIs","description":"Pull a consumer's credit history from any of the four major credit bureaus."},{"name":"Banking & Finance Verification APIs","description":"Confirm a bank account is real and owned by who it claims to be before money moves."},{"name":"Employment Verification APIs","description":"Check a person's employment history from their EPFO records."},{"name":"Business & GST Verification APIs","description":"Verify a business's GST registration and filing status before onboarding it."},{"name":"Vehicle Verification APIs","description":"Verify vehicle registration, ownership and outstanding traffic challans."},{"name":"Transactions","description":"Fetch the stored result of an earlier call."}],"paths":{"/identity-kyc/aadhaar-otp/send":{"post":{"operationId":"sendAadhaarOtp","summary":"Send an OTP to the mobile number linked to the Aadhaar.","description":"Verifies an individual's Aadhaar with their consent in two calls. The first call sends an OTP to the mobile number registered against the Aadhaar; the second submits that OTP and returns the verified details with the Aadhaar number masked.\n\nThis call is not billed. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Aadhaar OTP Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/aadhaar-otp-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"aadhaarNumber":{"type":"string","description":"12-digit Aadhaar number, no spaces.","examples":["234567890124"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["aadhaarNumber","consent"]},"example":{"aadhaarNumber":"234567890124","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"otpSent\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"otpSent"},"data":{"type":"object","properties":{"otpReferenceId":{"type":"string","description":"Pass this to the verify call together with the OTP.","examples":["otp_5c91d2e4"]}},"required":["otpReferenceId"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"otpSent","data":{"otpReferenceId":"otp_5c91d2e4"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":false,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged. INVALID_OTP: The OTP is incorrect or has expired. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/aadhaar-otp/verify":{"post":{"operationId":"verifyAadhaarOtp","summary":"Submit the OTP and receive the verified Aadhaar details.","description":"Verifies an individual's Aadhaar with their consent in two calls. The first call sends an OTP to the mobile number registered against the Aadhaar; the second submits that OTP and returns the verified details with the Aadhaar number masked.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Aadhaar OTP Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/aadhaar-otp-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"otpReferenceId":{"type":"string","description":"The otpReferenceId returned by the send call.","examples":["otp_5c91d2e4"]},"otp":{"type":"string","description":"6-digit OTP received on the linked mobile number.","examples":["123456"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]}},"required":["otpReferenceId","otp","consent"]},"example":{"otpReferenceId":"otp_5c91d2e4","otp":"123456","consent":"Y"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Name as recorded against the Aadhaar.","examples":["Asha Sample"]},"maskedAadhaar":{"type":"string","description":"Aadhaar number with the first eight digits masked.","examples":["XXXX XXXX 4312"]},"dateOfBirth":{"type":"string","description":"Date of birth, YYYY-MM-DD.","examples":["1991-04-17"]},"gender":{"type":"string","description":"Gender as recorded (M, F or T).","examples":["F"]},"address":{"type":"object","properties":{"state":{"type":"string"},"pincode":{"type":"string"}},"description":"State and pincode of the registered address.","examples":[{"state":"MH","pincode":"411045"}]}},"required":["name","maskedAadhaar","dateOfBirth","gender","address"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","maskedAadhaar":"XXXX XXXX 4312","dateOfBirth":"1991-04-17","gender":"F","address":{"state":"MH","pincode":"411045"}},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged. INVALID_OTP: The OTP is incorrect or has expired. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/pan":{"post":{"operationId":"verifyPan","summary":"Verify a PAN, fetch its status and registered name, and optionally compare a name you supply.","description":"Checks a PAN's validity and status and returns the name registered against it, in a single call with no document upload.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"PAN Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/pan-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]},"name":{"type":"string","description":"Optional. A name to compare with the name held against the PAN. English letters, spaces and . & / \\ ^ ~ only, up to 85 characters. When you send it, the response says whether it matches.","examples":["Asha Sample"]},"nameMatchMethod":{"type":"string","description":"Optional, used only with name. exact needs the same words; fuzzy (the default) tolerates spelling and word-order differences; enhanced also copes with abbreviations such as Md and Mohd and with missing common surnames.","examples":["fuzzy"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915","name":"Asha Sample","nameMatchMethod":"fuzzy"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"pan":{"type":"string","description":"The PAN that was verified.","examples":["ABCPE1234F"]},"name":{"type":"string","description":"Name registered against the PAN.","examples":["Asha Sample"]},"panStatus":{"type":"string","description":"Status of the PAN. VALID: the PAN exists and is active. A PAN that is not valid is answered with NO_DATA and not charged.","examples":["VALID"]},"panDisplayName":{"type":"string","description":"The name printed on the PAN card. null when the source does not hold it.","examples":["Asha Sample"]},"aadhaarSeedingStatus":{"type":"string","description":"Whether the PAN is linked to Aadhaar: OPERATIVE, NOT_OPERATIVE, or NOT_APPLICABLE for a PAN that is not an individual's. null when the source did not say.","examples":["OPERATIVE"]},"nameMatch":{"type":"boolean","description":"Whether the name you sent matches the name held against the PAN (a score above 80). null when you sent no name.","examples":[true]},"nameMatchScore":{"type":"integer","description":"How closely the name you sent matches, from 0 to 100. With nameMatchMethod exact it is 0 or 100. null when you sent no name.","examples":[100]}},"required":["pan","name","panStatus","panDisplayName","aadhaarSeedingStatus","nameMatch","nameMatchScore"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"pan":"ABCPE1234F","name":"Asha Sample","panStatus":"VALID","panDisplayName":"Asha Sample","aadhaarSeedingStatus":"OPERATIVE","nameMatch":true,"nameMatchScore":100},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/pan-advanced":{"post":{"operationId":"verifyPanAdvanced","summary":"Verify a PAN and fetch its status, holder type and Aadhaar link status.","description":"Checks a PAN like the basic check, and also returns the holder type and whether the PAN is linked to Aadhaar, so you can decide whether it is usable for filing and KYC.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"PAN Advanced Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/pan-advanced-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"pan":{"type":"string","description":"The PAN that was verified.","examples":["ABCPE1234F"]},"name":{"type":"string","description":"Name registered against the PAN.","examples":["Asha Sample"]},"panStatus":{"type":"string","description":"Status of the PAN, for example VALID.","examples":["VALID"]},"holderType":{"type":"string","description":"Type of holder: Individual, Company, Firm, Trust and so on.","examples":["Individual"]},"aadhaarLinked":{"type":"boolean","description":"Whether the PAN is linked to an Aadhaar number.","examples":[true]}},"required":["pan","name","panStatus","holderType","aadhaarLinked"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"pan":"ABCPE1234F","name":"Asha Sample","panStatus":"VALID","holderType":"Individual","aadhaarLinked":true},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/voter-id":{"post":{"operationId":"verifyVoterId","summary":"Verify a Voter ID (EPIC) number.","description":"Verifies an EPIC (Voter ID) number and returns the elector details held against it, so a Voter ID can be accepted as identity or address proof without a manual check.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Voter ID Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/voter-id-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"epicNumber":{"type":"string","description":"Voter ID (EPIC) number.","examples":["ABC1234567"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["epicNumber","consent"]},"example":{"epicNumber":"ABC1234567","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Elector name.","examples":["Asha Sample"]},"relativeName":{"type":"string","description":"Name of the relative recorded against the elector.","examples":["Ravi Sample"]},"gender":{"type":"string","description":"Gender as recorded.","examples":["F"]},"state":{"type":"string","description":"State of registration.","examples":["MH"]},"assemblyConstituency":{"type":"string","description":"Assembly constituency name.","examples":["Kothrud"]}},"required":["name","relativeName","gender","state","assemblyConstituency"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","relativeName":"Ravi Sample","gender":"F","state":"MH","assemblyConstituency":"Kothrud"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/driving-licence":{"post":{"operationId":"verifyDrivingLicence","summary":"Verify a driving licence and fetch its validity and vehicle classes.","description":"Verifies a driving licence number against the holder's date of birth and returns its validity and the vehicle classes the licence covers.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Driving Licence Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/driving-licence-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dlNumber":{"type":"string","description":"Driving licence number.","examples":["MH1420110000000"]},"dateOfBirth":{"type":"string","description":"Licence holder's date of birth, YYYY-MM-DD.","examples":["1991-04-17"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["dlNumber","dateOfBirth","consent"]},"example":{"dlNumber":"MH1420110000000","dateOfBirth":"1991-04-17","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Licence holder's name.","examples":["Asha Sample"]},"status":{"type":"string","description":"Licence status, for example ACTIVE.","examples":["ACTIVE"]},"validUpto":{"type":"string","description":"Licence validity end date, YYYY-MM-DD.","examples":["2031-04-16"]},"vehicleClasses":{"type":"array","items":{"type":"string"},"description":"Vehicle classes the licence covers.","examples":[["LMV","MCWG"]]},"issuingAuthority":{"type":"string","description":"Issuing RTO.","examples":["RTO Pune"]}},"required":["name","status","validUpto","vehicleClasses","issuingAuthority"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","status":"ACTIVE","validUpto":"2031-04-16","vehicleClasses":["LMV","MCWG"],"issuingAuthority":"RTO Pune"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/face-match":{"post":{"operationId":"matchFaces","summary":"Compare two face images.","description":"Compares two photos of a face and returns whether they show the same person, with a match score. Typically a selfie against the photo on an ID.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Face Match API documentation","url":"https://verification.techinnoverz.com/api-docs/face-match-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"image1":{"type":"string","description":"First photo, JPEG or PNG, base64 encoded (up to about 2 MB).","examples":["/9j/4AAQSkZJRgABAQAAAQABAAD..."]},"image2":{"type":"string","description":"Second photo, JPEG or PNG, base64 encoded (up to about 2 MB).","examples":["/9j/4AAQSkZJRgABAQAAAQABAAD..."]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["image1","image2","consent"]},"example":{"image1":"/9j/4AAQSkZJRgABAQAAAQABAAD...","image2":"/9j/4AAQSkZJRgABAQAAAQABAAD...","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"match":{"type":"boolean","description":"Whether the two photos show the same person.","examples":[true]},"matchScore":{"type":"number","description":"Similarity from 0 to 100.","examples":[92.4]}},"required":["match","matchScore"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"match":true,"matchScore":92.4},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/face-liveness":{"post":{"operationId":"verifyLiveFace","summary":"Check liveness of a selfie and match it to an ID photo.","description":"Checks that a selfie shows a live person (not a photo of a photo or a screen) and that it matches the photo on their ID, in one call.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"Face Match with Liveness API documentation","url":"https://verification.techinnoverz.com/api-docs/face-liveness-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selfie":{"type":"string","description":"The selfie, JPEG or PNG, base64 encoded (up to about 2 MB).","examples":["/9j/4AAQSkZJRgABAQAAAQABAAD..."]},"idImage":{"type":"string","description":"The photo on the ID, JPEG or PNG, base64 encoded (up to about 2 MB).","examples":["/9j/4AAQSkZJRgABAQAAAQABAAD..."]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["selfie","idImage","consent"]},"example":{"selfie":"/9j/4AAQSkZJRgABAQAAAQABAAD...","idImage":"/9j/4AAQSkZJRgABAQAAAQABAAD...","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"isLive":{"type":"boolean","description":"Whether the selfie shows a live person.","examples":[true]},"livenessScore":{"type":"number","description":"Confidence of liveness from 0 to 100.","examples":[97.1]},"match":{"type":"boolean","description":"Whether the selfie matches the ID photo.","examples":[true]},"matchScore":{"type":"number","description":"Similarity from 0 to 100.","examples":[91.8]}},"required":["isLive","livenessScore","match","matchScore"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"isLive":true,"livenessScore":97.1,"match":true,"matchScore":91.8},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/digilocker/initiate":{"post":{"operationId":"initiateDigilocker","summary":"Start a DigiLocker request and get the link the person must approve.","description":"Lets a person share their verified documents from DigiLocker with consent. You start a request, send the person to the returned link to approve it, then fetch the details once they have.\n\nThis call is not billed. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"DigiLocker Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/digilocker-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string","description":"Where the person returns to after approving, an https address.","examples":["https://example.com/kyc/done"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["redirectUrl","consent"]},"example":{"redirectUrl":"https://example.com/kyc/done","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"initiated\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"initiated"},"data":{"type":"object","properties":{"digilockerRequestId":{"type":"string","description":"Quote this when fetching the result.","examples":["dlr_8c31ba91"]},"authorizationUrl":{"type":"string","description":"Send the person here to approve the share.","examples":["https://digilocker.example/authorize/dlr_8c31ba91"]}},"required":["digilockerRequestId","authorizationUrl"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"initiated","data":{"digilockerRequestId":"dlr_8c31ba91","authorizationUrl":"https://digilocker.example/authorize/dlr_8c31ba91"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":false,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/identity-kyc/digilocker/fetch":{"post":{"operationId":"fetchDigilockerDocuments","summary":"Fetch the shared details once the person has approved.","description":"Lets a person share their verified documents from DigiLocker with consent. You start a request, send the person to the returned link to approve it, then fetch the details once they have.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Identity & KYC Verification APIs"],"externalDocs":{"description":"DigiLocker Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/digilocker-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"digilockerRequestId":{"type":"string","description":"The id returned when the request was started.","examples":["dlr_8c31ba91"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["digilockerRequestId","consent"]},"example":{"digilockerRequestId":"dlr_8c31ba91","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Name as recorded in DigiLocker.","examples":["Asha Sample"]},"dateOfBirth":{"type":"string","description":"Date of birth, YYYY-MM-DD.","examples":["1994-03-21"]},"maskedAadhaar":{"type":"string","description":"Aadhaar number with all but the last four digits hidden.","examples":["XXXXXXXX1234"]},"documents":{"type":"array","items":{"type":"string"},"description":"Documents the person shared.","examples":[["PAN","DRIVING_LICENCE"]]}},"required":["name","dateOfBirth","maskedAadhaar","documents"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","dateOfBirth":"1994-03-21","maskedAadhaar":"XXXXXXXX1234","documents":["PAN","DRIVING_LICENCE"]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mobile/mobile-to-address":{"post":{"operationId":"getAddressByMobile","summary":"Fetch the name and address linked to a mobile number.","description":"Finds the name and address linked to a mobile number.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Mobile Intelligence APIs"],"externalDocs":{"description":"Mobile to Address API documentation","url":"https://verification.techinnoverz.com/api-docs/mobile-to-address-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"string","description":"10-digit Indian mobile number. +91 and spaces are accepted.","examples":["9876543210"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["mobile","consent"]},"example":{"mobile":"9876543210","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Name linked to the number.","examples":["Asha Sample"]},"address":{"type":"string","description":"Address linked to the number.","examples":["12 Sample Road, Sample Nagar"]},"pincode":{"type":"string","description":"Postal code of the address.","examples":["560001"]}},"required":["name","address","pincode"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","address":"12 Sample Road, Sample Nagar","pincode":"560001"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mobile/mobile-prefill":{"post":{"operationId":"getPrefillByMobile","summary":"Fetch prefill details for a mobile number.","description":"Prefills a customer's details from their mobile number so they type less on a sign-up or loan form.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Mobile Intelligence APIs"],"externalDocs":{"description":"Mobile to Prefill API documentation","url":"https://verification.techinnoverz.com/api-docs/mobile-prefill-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"string","description":"10-digit Indian mobile number. +91 and spaces are accepted.","examples":["9876543210"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["mobile","consent"]},"example":{"mobile":"9876543210","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Full name.","examples":["Asha Sample"]},"gender":{"type":"string","description":"Gender as recorded.","examples":["F"]},"dateOfBirth":{"type":"string","description":"Date of birth, YYYY-MM-DD.","examples":["1994-03-21"]},"email":{"type":"string","description":"Email address.","examples":["asha@example.com"]},"address":{"type":"string","description":"Address.","examples":["12 Sample Road, Sample Nagar"]},"pincode":{"type":"string","description":"Postal code.","examples":["560001"]}},"required":["name","gender","dateOfBirth","email","address","pincode"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","gender":"F","dateOfBirth":"1994-03-21","email":"asha@example.com","address":"12 Sample Road, Sample Nagar","pincode":"560001"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mobile/mobile-to-upi-id":{"post":{"operationId":"getUpiByMobile","summary":"Fetch the UPI ID linked to a mobile number.","description":"Finds the UPI ID and registered name linked to a mobile number, to confirm a payee before paying.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Mobile Intelligence APIs"],"externalDocs":{"description":"Mobile to UPI ID API documentation","url":"https://verification.techinnoverz.com/api-docs/mobile-to-upi-id-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"string","description":"10-digit Indian mobile number. +91 and spaces are accepted.","examples":["9876543210"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["mobile","consent"]},"example":{"mobile":"9876543210","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"upiId":{"type":"string","description":"UPI ID linked to the number.","examples":["asha@sample"]},"name":{"type":"string","description":"Name registered against the UPI ID.","examples":["Asha Sample"]}},"required":["upiId","name"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"upiId":"asha@sample","name":"Asha Sample"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mobile/mobile-to-multiple-upi":{"post":{"operationId":"getUpiIdsByMobile","summary":"Fetch all UPI IDs linked to a mobile number.","description":"Finds every UPI ID linked to a mobile number.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Mobile Intelligence APIs"],"externalDocs":{"description":"Mobile to Multiple UPI IDs API documentation","url":"https://verification.techinnoverz.com/api-docs/mobile-to-multiple-upi-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"string","description":"10-digit Indian mobile number. +91 and spaces are accepted.","examples":["9876543210"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["mobile","consent"]},"example":{"mobile":"9876543210","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Name registered against the UPI IDs.","examples":["Asha Sample"]},"upiIds":{"type":"array","items":{"type":"string"},"description":"UPI IDs linked to the number.","examples":[["asha@sample","asha.s@sample"]]}},"required":["name","upiIds"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","upiIds":["asha@sample","asha.s@sample"]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mobile/mobile-to-ecomm-address":{"post":{"operationId":"getEcommAddressByMobile","summary":"Fetch e-commerce delivery addresses for a mobile number.","description":"Finds delivery addresses used on e-commerce platforms with a mobile number.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Mobile Intelligence APIs"],"externalDocs":{"description":"Mobile to E-Commerce Address API documentation","url":"https://verification.techinnoverz.com/api-docs/mobile-to-ecomm-address-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mobile":{"type":"string","description":"10-digit Indian mobile number. +91 and spaces are accepted.","examples":["9876543210"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["mobile","consent"]},"example":{"mobile":"9876543210","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"name":{"type":"string","description":"Name used on the orders.","examples":["Asha Sample"]},"addresses":{"type":"array","items":{"type":"string"},"description":"Delivery addresses found.","examples":[["12 Sample Road, Sample Nagar, 560001"]]}},"required":["name","addresses"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"name":"Asha Sample","addresses":["12 Sample Road, Sample Nagar, 560001"]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/bureau/cibil-credit-report":{"post":{"operationId":"getCibilCreditReport","summary":"Fetch a CIBIL credit report for a PAN.","description":"Pulls a consumer's CIBIL credit score and a summary of their credit history through a single call, normalised into one JSON schema so you can switch or combine bureaus without changing your integration.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Background & Bureau Verification APIs"],"externalDocs":{"description":"CIBIL Credit Report API documentation","url":"https://verification.techinnoverz.com/api-docs/cibil-credit-report-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"score":{"type":"integer","description":"Credit score on the bureau's 300–900 scale.","examples":[782]},"tradelines":{"type":"integer","description":"Number of credit accounts (tradelines) on file.","examples":[4]},"enquiriesLast6Months":{"type":"integer","description":"Credit enquiries made in the last six months.","examples":[1]}},"required":["score","tradelines","enquiriesLast6Months"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"score":782,"tradelines":4,"enquiriesLast6Months":1},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/bureau/crif-credit-report":{"post":{"operationId":"getCrifCreditReport","summary":"Fetch a CRIF High Mark credit report for a PAN.","description":"Pulls a consumer's CRIF High Mark credit score and a summary of their credit history through a single call, normalised into one JSON schema so you can switch or combine bureaus without changing your integration.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Background & Bureau Verification APIs"],"externalDocs":{"description":"CRIF Credit Report API documentation","url":"https://verification.techinnoverz.com/api-docs/crif-credit-report-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"score":{"type":"integer","description":"Credit score on the bureau's 300–900 scale.","examples":[782]},"tradelines":{"type":"integer","description":"Number of credit accounts (tradelines) on file.","examples":[4]},"enquiriesLast6Months":{"type":"integer","description":"Credit enquiries made in the last six months.","examples":[1]}},"required":["score","tradelines","enquiriesLast6Months"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"score":782,"tradelines":4,"enquiriesLast6Months":1},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/bureau/experian-credit-report":{"post":{"operationId":"getExperianCreditReport","summary":"Fetch a Experian credit report for a PAN.","description":"Pulls a consumer's Experian credit score and a summary of their credit history through a single call, normalised into one JSON schema so you can switch or combine bureaus without changing your integration.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Background & Bureau Verification APIs"],"externalDocs":{"description":"Experian Credit Report API documentation","url":"https://verification.techinnoverz.com/api-docs/experian-credit-report-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"score":{"type":"integer","description":"Credit score on the bureau's 300–900 scale.","examples":[782]},"tradelines":{"type":"integer","description":"Number of credit accounts (tradelines) on file.","examples":[4]},"enquiriesLast6Months":{"type":"integer","description":"Credit enquiries made in the last six months.","examples":[1]}},"required":["score","tradelines","enquiriesLast6Months"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"score":782,"tradelines":4,"enquiriesLast6Months":1},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/bureau/equifax-credit-report":{"post":{"operationId":"getEquifaxCreditReport","summary":"Fetch a Equifax credit report for a PAN.","description":"Pulls a consumer's Equifax credit score and a summary of their credit history through a single call, normalised into one JSON schema so you can switch or combine bureaus without changing your integration.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Background & Bureau Verification APIs"],"externalDocs":{"description":"Equifax Credit Report API documentation","url":"https://verification.techinnoverz.com/api-docs/equifax-credit-report-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pan":{"type":"string","description":"10-character PAN.","examples":["ABCPE1234F"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["pan","consent"]},"example":{"pan":"ABCPE1234F","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"score":{"type":"integer","description":"Credit score on the bureau's 300–900 scale.","examples":[782]},"tradelines":{"type":"integer","description":"Number of credit accounts (tradelines) on file.","examples":[4]},"enquiriesLast6Months":{"type":"integer","description":"Credit enquiries made in the last six months.","examples":[1]}},"required":["score","tradelines","enquiriesLast6Months"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"score":782,"tradelines":4,"enquiriesLast6Months":1},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/banking/bank-penny-drop":{"post":{"operationId":"verifyBankAccount","summary":"Verify a bank account and fetch the name held at the bank.","description":"Confirms that a bank account exists and returns the name held at the bank, using a penny-drop transfer or an instant e-statement (IES), so you can match it against your customer before money moves.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Banking & Finance Verification APIs"],"externalDocs":{"description":"Bank Penny Drop / IES Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/bank-penny-drop-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountNumber":{"type":"string","description":"Bank account number.","examples":["1234567890"]},"ifsc":{"type":"string","description":"11-character IFSC of the branch.","examples":["ABCD0123456"]},"method":{"type":"string","description":"Verification method: pennyDrop (default) or ies for an instant e-statement.","examples":["pennyDrop"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["accountNumber","ifsc","consent"]},"example":{"accountNumber":"1234567890","ifsc":"ABCD0123456","method":"pennyDrop","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"accountExists":{"type":"boolean","description":"Whether the account exists and can receive funds.","examples":[true]},"nameAtBank":{"type":"string","description":"Account holder name returned by the bank.","examples":["Asha Sample"]},"bankName":{"type":"string","description":"Name of the bank.","examples":["Sample Bank"]}},"required":["accountExists","nameAtBank","bankName"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"accountExists":true,"nameAtBank":"Asha Sample","bankName":"Sample Bank"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/banking/bank-pennyless":{"post":{"operationId":"verifyBankAccountPennyless","summary":"Verify a bank account without a penny-drop transfer.","description":"Confirms that a bank account exists and returns the name held at the bank without sending any money.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Banking & Finance Verification APIs"],"externalDocs":{"description":"Bank Account Verification (Penny-less) API documentation","url":"https://verification.techinnoverz.com/api-docs/bank-pennyless-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountNumber":{"type":"string","description":"Bank account number.","examples":["1234567890"]},"ifsc":{"type":"string","description":"11-character IFSC of the branch.","examples":["ABCD0123456"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["accountNumber","ifsc","consent"]},"example":{"accountNumber":"1234567890","ifsc":"ABCD0123456","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"accountExists":{"type":"boolean","description":"Whether the account exists.","examples":[true]},"nameAtBank":{"type":"string","description":"Account holder name returned by the bank.","examples":["Asha Sample"]},"bankName":{"type":"string","description":"Name of the bank.","examples":["Sample Bank"]}},"required":["accountExists","nameAtBank","bankName"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"accountExists":true,"nameAtBank":"Asha Sample","bankName":"Sample Bank"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/employment/uan-advance":{"post":{"operationId":"getUanAdvance","summary":"Fetch employment history for a UAN.","description":"Fetches a person's employment history from their EPFO Universal Account Number (UAN): employers, joining and exit dates.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Employment Verification APIs"],"externalDocs":{"description":"UAN Advance API documentation","url":"https://verification.techinnoverz.com/api-docs/uan-advance-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uan":{"type":"string","description":"12-digit Universal Account Number.","examples":["100123456789"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["uan","consent"]},"example":{"uan":"100123456789","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"uan":{"type":"string","description":"The UAN that was checked.","examples":["100123456789"]},"name":{"type":"string","description":"Member name.","examples":["Asha Sample"]},"employmentHistory":{"type":"array","items":{"type":"object","properties":{"establishmentName":{"type":"string"},"dateOfJoining":{"type":"string"},"dateOfExit":{"type":"null"}}},"description":"Employers in order, most recent first.","examples":[[{"establishmentName":"Sample Technologies Pvt Ltd","dateOfJoining":"2021-06-01","dateOfExit":null}]]}},"required":["uan","name","employmentHistory"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"uan":"100123456789","name":"Asha Sample","employmentHistory":[{"establishmentName":"Sample Technologies Pvt Ltd","dateOfJoining":"2021-06-01","dateOfExit":null}]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/business-gst/gst-advance":{"post":{"operationId":"verifyGstin","summary":"Verify a GSTIN and fetch registration status and filing history.","description":"Verifies a GSTIN and returns the business's registration details, current status and recent return-filing history from GSTN records, so you can vet a business before onboarding it.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Business & GST Verification APIs"],"externalDocs":{"description":"GST Advance Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/gst-advance-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"gstin":{"type":"string","description":"15-character GSTIN.","examples":["22AAAAA0000A1Z5"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["gstin"]},"example":{"gstin":"22AAAAA0000A1Z5","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"gstin":{"type":"string","description":"The GSTIN that was verified.","examples":["22AAAAA0000A1Z5"]},"legalName":{"type":"string","description":"Legal name of the business.","examples":["Sample Enterprises Private Limited"]},"tradeName":{"type":"string","description":"Trade name of the business.","examples":["Sample Enterprises"]},"registrationStatus":{"type":"string","description":"Registration status, for example Active.","examples":["Active"]},"registrationDate":{"type":"string","description":"Date of registration, YYYY-MM-DD.","examples":["2018-07-01"]},"filingHistory":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string"},"returnType":{"type":"string"},"filedOn":{"type":"string"},"status":{"type":"string"}}},"description":"Recent return filings.","examples":[[{"period":"082026","returnType":"GSTR-3B","filedOn":"2026-09-18","status":"Filed"}]]}},"required":["gstin","legalName","tradeName","registrationStatus","registrationDate","filingHistory"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"gstin":"22AAAAA0000A1Z5","legalName":"Sample Enterprises Private Limited","tradeName":"Sample Enterprises","registrationStatus":"Active","registrationDate":"2018-07-01","filingHistory":[{"period":"082026","returnType":"GSTR-3B","filedOn":"2026-09-18","status":"Filed"}]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/vehicle/rc":{"post":{"operationId":"verifyVehicleRc","summary":"Verify a vehicle registration certificate.","description":"Verifies a vehicle registration certificate (RC) and returns the registered owner, vehicle details and registration status.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Vehicle Verification APIs"],"externalDocs":{"description":"RC Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/rc-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"registrationNumber":{"type":"string","description":"Vehicle registration number without spaces.","examples":["MH12AB1234"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["registrationNumber","consent"]},"example":{"registrationNumber":"MH12AB1234","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"ownerName":{"type":"string","description":"Registered owner's name.","examples":["Asha Sample"]},"vehicleClass":{"type":"string","description":"Vehicle class.","examples":["Motor Car"]},"makeModel":{"type":"string","description":"Make and model.","examples":["Sample Motors Hatchback"]},"fuelType":{"type":"string","description":"Fuel type.","examples":["PETROL"]},"registrationDate":{"type":"string","description":"Date of first registration, YYYY-MM-DD.","examples":["2019-03-12"]},"rcStatus":{"type":"string","description":"Registration status, for example ACTIVE.","examples":["ACTIVE"]}},"required":["ownerName","vehicleClass","makeModel","fuelType","registrationDate","rcStatus"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"ownerName":"Asha Sample","vehicleClass":"Motor Car","makeModel":"Sample Motors Hatchback","fuelType":"PETROL","registrationDate":"2019-03-12","rcStatus":"ACTIVE"},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/vehicle/rc-challan":{"post":{"operationId":"getRcChallans","summary":"Fetch outstanding traffic challans for a vehicle.","description":"Checks whether any traffic challans are outstanding against a vehicle and returns the details of each one.\n\nThis call is billed when it returns a successful result. You are charged only on successful hits. Failed, no-data and error calls are free.","tags":["Vehicle Verification APIs"],"externalDocs":{"description":"RC Challan Verification API documentation","url":"https://verification.techinnoverz.com/api-docs/rc-challan-verification-api"},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"registrationNumber":{"type":"string","description":"Vehicle registration number without spaces.","examples":["MH12AB1234"]},"consent":{"type":"string","description":"Must be \"Y\". Records that the end customer consented to this check; logged against the transaction.","examples":["Y"]},"referenceId":{"type":"string","description":"Your own id, echoed back in the response for reconciliation.","examples":["app_20915"]}},"required":["registrationNumber","consent"]},"example":{"registrationNumber":"MH12AB1234","consent":"Y","referenceId":"app_20915"}}}},"responses":{"200":{"description":"Successful response with status \"found\".","content":{"application/json":{"schema":{"type":"object","required":["status","data","source","dataAsOf","billing","txnId","livemode"],"properties":{"status":{"type":"string","const":"found"},"data":{"type":"object","properties":{"totalChallans":{"type":"integer","description":"Number of challans found.","examples":[1]},"challans":{"type":"array","items":{"type":"object","properties":{"challanNumber":{"type":"string"},"offence":{"type":"string"},"amount":{"type":"integer"},"status":{"type":"string"},"issuedOn":{"type":"string"}}},"description":"Details of each challan. Amounts are in INR.","examples":[[{"challanNumber":"MH00000000000000","offence":"Over-speeding","amount":1000,"status":"PENDING","issuedOn":"2026-08-02"}]]}},"required":["totalChallans","challans"]},"source":{"type":"string","enum":["provider","stored"],"description":"provider: the data was fetched for this call. stored: it was fetched by an earlier lookup of the same input that we kept; dataAsOf says when."},"dataAsOf":{"type":"string","format":"date-time","description":"When the data was fetched from its source."},"referenceId":{"type":"string","description":"The referenceId you sent, echoed back."},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string","description":"Unique id of this transaction."},"livemode":{"type":"boolean","description":"True for a live key, false for a test key."}}},"example":{"status":"found","data":{"totalChallans":1,"challans":[{"challanNumber":"MH00000000000000","offence":"Over-speeding","amount":1000,"status":"PENDING","issuedOn":"2026-08-02"}]},"source":"provider","dataAsOf":"2026-11-03T09:30:00.000Z","referenceId":"app_20915","billing":{"charged":true,"walletBalance":"12450.00"},"txnId":"txn_8c31ba90","livemode":true}}}},"400":{"description":"INVALID_INPUT: A field is missing or malformed. The details list each problem. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"INVALID_KEY: The key is missing, revoked, or not a key we issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"WALLET_EMPTY: Your available balance is below the price of this call. Top up and retry. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"PRODUCTION_NOT_ENABLED: A live key was used before live access was enabled for your account. Use a test key, or ask us to enable live access. TEST_NOT_ENABLED: A test key was used before test (UAT) access was enabled for your account. Ask us to enable it. API_NOT_ENABLED: This check is switched off for your account, or is not available for live use yet. IP_NOT_ALLOWED: The key is restricted to certain IP addresses and this call came from another. ACCOUNT_SUSPENDED: The account is suspended. Contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"NO_DATA: A valid request, but no record was found. Not charged. ROUTE_NOT_FOUND: There is no endpoint at that path.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"METHOD_NOT_ALLOWED: Use the method shown in the Allow header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: A call with the same Idempotency-Key is still being processed. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"PAYLOAD_TOO_LARGE: The request body is too large. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Send the request with Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"IDEMPOTENCY_KEY_REUSED: This Idempotency-Key was already used with a different request body. Use a new key for a new request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"RATE_LIMITED: Too many requests or too many at once. Wait for the Retry-After delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"INTERNAL_ERROR: Something went wrong on our side. Not charged. Quote the txnId if you contact support.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"SOURCE_ERROR: The data source returned an error. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"SOURCE_DOWN: The data source is unavailable right now. Not charged. Retry after the delay in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"504":{"description":"SOURCE_TIMEOUT: The data source did not answer in time. Not charged.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/requests/{txnId}":{"get":{"operationId":"getTransaction","summary":"Fetch the stored response of an earlier transaction.","description":"Free of charge. If the transaction found a result that had not yet been delivered to you, fetching it delivers it and charges it once. Responses are kept for 7 days (10 minutes for Aadhaar, DigiLocker and credit-bureau checks).","tags":["Transactions"],"parameters":[{"name":"txnId","in":"path","required":true,"schema":{"type":"string"},"description":"The txnId of a transaction made with this key's environment."}],"responses":{"200":{"description":"The stored response, exactly as it was sent."},"404":{"description":"NO_DATA: no such transaction for your account, or its stored response has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"IDEMPOTENCY_IN_PROGRESS: the transaction is still being processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,128}$"},"description":"Makes retries safe: the same key with the same body returns the same result and never charges twice."}},"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key, created in the Panel."}},"schemas":{"Billing":{"type":"object","required":["charged"],"properties":{"charged":{"type":"boolean","description":"Whether this call was charged to your wallet."},"walletBalance":{"type":"string","description":"Your wallet balance in INR after this call, as a decimal string. Present on live calls that use the wallet.","examples":["12450.00"]}}},"ErrorResponse":{"type":"object","required":["status","error","billing","txnId"],"properties":{"status":{"type":"string","const":"error"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_INPUT","INVALID_KEY","WALLET_EMPTY","PRODUCTION_NOT_ENABLED","TEST_NOT_ENABLED","API_NOT_ENABLED","IP_NOT_ALLOWED","ACCOUNT_SUSPENDED","NO_DATA","ROUTE_NOT_FOUND","METHOD_NOT_ALLOWED","IDEMPOTENCY_IN_PROGRESS","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","IDEMPOTENCY_KEY_REUSED","RATE_LIMITED","INTERNAL_ERROR","SOURCE_ERROR","SOURCE_DOWN","SOURCE_TIMEOUT","INVALID_OTP"]},"message":{"type":"string"},"details":{"type":"array","description":"For INVALID_INPUT: the fields that were wrong.","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}},"billing":{"$ref":"#/components/schemas/Billing"},"txnId":{"type":"string"},"livemode":{"type":"boolean"}},"examples":[{"status":"error","error":{"code":"NO_DATA","message":"No record found for the given input. Not charged."},"billing":{"charged":false},"txnId":"txn_8c31ba91","livemode":true}]}}}}