HyperStreams

Empowering Seamless Financial Innovation with HyperStreams

Hyperstreams are the best way to integrate with KYC APIs. They are a powerful new offering of the Decentro KYC stack that empowers developers to build custom financial products and services with unparalleled ease.

Hyperstreams, designed with the utmost attention to detail, provide a seamless integration of APIs and SDKs, enabling you to create exceptional user experiences and drive financial innovation.


πŸš€ Getting Started

  • Start by selecting a Hyperstream from Decentro’s pre-configured Hyperstreams library. Once you have selected a hyperstream, all you need to do is hit the hyperstream-executor API.
  • Depending on the hyperstream, you users will enter the minimum set of parameters, such as only the name and phone number.
  • Even the most complex hyperstreams take only about 8-10 seconds to process, but the control is completely in your hands. All Hyperstreams are available in both synchronous and asynchronous forms, so you can continue with the user flow if you wish to.
  • Hyperstreams report progress and checkpoint results, so you will have full visibility of what is exactly going on.

🌟 Why use Hyperstreams?

  • Automation: Hyperstreams automate intricate processes, reducing the need for manual intervention and minimizing the risk of errors.
  • Scalability: Hyperstreams can easily scale up or down based on business requirements, ensuring optimal performance in changing demand scenarios.
  • Increased Focus: With Hyperstreams handling complex processes, developers can shift their focus to delivering superior customer experiences.
  • Faster Go-to-Market: Hyperstreams significantly reduce development time, enabling faster product launches and a competitive advantage.
  • Decreased Drop-offs: Hyperstreams require minimal customer intervention, resulting in smoother user experiences and reduced drop-off rates.
  • Customization: Hyperstreams offer input parameter customization and matching threshold settings, allowing tailored experiences to meet specific requirements.
  • Graceful Error Handling: Hyperstreams handle errors and exceptions gracefully, minimizing the risk of downtime and ensuring seamless operations.
  • Developer Resources: Hyperstreams provide comprehensive API documentation, code samples, and support to facilitate seamless integration.

πŸ‘· Built to help you build better

  • All Form Factors:
    • Hyperstreams can be consumed as APIs as well as SDKs!
    • Use Hyperstreams in the API form to get full control of your UI
    • Or use them as SDKs for a lightning-fast go-to-market experience.
  • Different User Flows:
    • Hyperstreams are provided in synchronous as well as asynchronous forms to better suit your user flows.
    • You can either use a simple synchronous flow
    • Or move your user to the next part of the journey even before you get a response from the API using the asynchronous flow.
  • Optional Fields:
    • Hyperstreams have tons of features that can be toggled for your needs.
    • For example, if you choose to use the asynchronous version of Hyperstreams, you get the following add-ons:
      • checkpoint_results: This is a boolean field which returns all the intermediate responses of the individual modules in your hyperstream. Just set this to parameter to true, and the hyperstream will hit your callback URL at every step in the sequence.
      • progress_report: This is a boolean field which displays the ratio of the total number of checkpoints completed to the total number of checkpoints in your hyperstream. Set this parameter to true and your callback URL will get progress reports which can be used for various purposes, such as displaying a simple progress bar, or even a checklist for your users.
  • Encryption & Decryption
    • Hyperstreams have an optional toggle to enable encryption and decryption of the payloads for added security. The following flow diagram illustrates how payloads from both servers are encrypted using symmetric and asymmetric encryption.
Encryption & Decryption Flow

Encryption & Decryption Flow


πŸ“š Hyperstreams Library

HyperstreamCodeUse Cases
Advanced CKYC DownloadADVANCED_CKYC_DOWNLOADKYC for banking and payments platforms where CKYC documents need to be validated from the source.
Advanced OCRADVANCED_OCROCR for all financial institutions that want to process multiple types of documents from various sources like DigiLocker and CKYC
CKYC MatchingCKYC_MATCHINGKYC for banking and payments platforms where user input needs to be matched with CKYC documents.
CKYC PrefillCKYC_PREFILLKYC for lending and investment platforms for seamless onboarding of users with credit history.

Advanced CKYC Download

Since the changes in Central KYC Registry APIs after v1.2 significantly reduced the occurrences of additional useful information in CKYC records, using CKYC Download alone for your onboarding might not be a seamless process, or in some case, fully compliant.

The documents present in the CKYC registry need to be classified correctly and according to RBI's directions, expired documents in the CKYC registry can no longer be used as a valid KYC for onboarding a customer.

The Advanced CKYC Download Hyperstream solves all these problems for you. This Hyperstream can process the documents for a given CKYC record and add additional checks such as:

  • id_classification: This boolean flag checks if the image of the document in the CKYC Repository has been classified correctly or not. We use a combination of in-house of external providers to compute this.
  • expiry_date: The string value indicates the expiry date of the document, hence indicating to you if a document can still be valid to perform KYC while onboarding customers. We provide this information for passport and driving license documents.
Advanced CKYC Download Hyperstream Flow

Advanced CKYC Download Hyperstream Flow

Auth Factor

auth_factor_typeauth_factor
1 Date of birth in the format: "yyyy-mm-dd".
Example: "1993-03-29".
2A combination of the 6-digit pin code and the year of birth.
Example: "5600171992" where 560017 is the pin code and 1992 is the year of birth.
3A valid 10-digit mobile number of the person whose AADHAAR is linked with.
Example: "9001122339".

Sample Request & Response

{
    "reference_id": "DECXXXXXXXX",
    "hyperstream": "ADVANCED_CKYC_DOWNLOAD",
    "callback_url": "https://hdfcbank.com/savings-account/ckyc-download",
    "initial_input": {
        "id_number": "XXXXXXXXXXXXXX",
        "auth_factor_type": 1,
        "auth_factor": "1998-12-04"
    },
    "progress_report": false,
    "checkpoint_results": false,
    "consent": true,
    "consent_purpose": "Documents to create a savings account"
}
{
  "decentro_txn_id": "XXXXXXX",
  "status": "SUCCESS",
  "http_status_code": 200,
  "response_key": "success_hyperstream",
  "message": "Successfully completed hyperStream",
  "data": {
    "ADVANCED_CKYC_DOWNLOAD": {
      "id_type": "CKYC",
      "identity_number": "XXXXXXXXXXX",
      "personal_details": {
        "constituiton_type": "Individual",
        "account_type": "Normal",
        "ckyc_no": "XXXXX",
        "prefix": "XX",
        "first_name": "XXXXX",
        "last_name": "XXXXX",
        "full_name": "XXXXX",
        "father_prefix": "XXXXX",
        "father_fname": "XXXXX",
        "father_lname": "XXXXX",
        "father_fullname": "XXXXX",
        "mother_prefix": "XXX",
        "mother_fname": "XXXXX",
        "mother_lname": "XXXXX",
        "mother_fullname": "XXXXX",
        "gender": "MALE",
        "dob": "DD-MM-YYYY",
        "pan": "XXXXX",
        "perm_line1": "XXXXX",
        "perm_city": "XXXXX",
        "perm_dist": "XXXXX",
        "perm_state": "XX",
        "perm_country": "IN",
        "perm_pin": "XXXXX",
        "perm_poa": "XXXXX",
        "perm_corres_sameflag": "N",
        "corres_line1": "XXXXX",
        "corres_city": "XXXXX",
        "corres_dist": "XXXXX",
        "corres_state": "XX",
        "corres_country": "IN",
        "corres_pin": "XXXXX",
        "resi_tel_num": "XXXXX",
        "off_tel_num": "XXXXX",
        "mob_code": "XX",
        "mob_num": "XXXXX",
        "email": "XXXXX",
        "dec_date": "DD-MM-YYYY",
        "dec_place": "XXXXX",
        "kyc_date": "********",
        "doc_sub": "Certified Copies",
        "kyc_name": "********",
        "kyc_designation": "********",
        "kyc_branch": "********",
        "kyc_empcode": "********",
        "num_identity": "2",
        "num_related": "0",
        "num_images": "4",
        "permanent_address": "XXXXX",
        "corresponding_address": "XXXXX"
      },
      "identity_details": {
        "Voter ID": {
          "identity_code": "Voter ID",
          "identity_number": "XXXXX",
          "identity_verification_status": "NO"
        },
        "AADHAAR": {
          "identity_code": "Proof of Possession of Aadhaar",
          "identity_number": "XXXXXXXX1234",
          "identity_verification_status": "YES"
        }
      },
      "image_details": {
        "Photograph": {
          "image_code": "Photograph",
          "image_data": "<base64_data>",
          "global_flag": "GLOBAL",
          "branch_code": "SSLHO",
          "image_type": "JPEG"
        },
        "PAN": {
          "image_code": "PAN",
          "image_data": "<base64_data>",
          "global_flag": "GLOBAL",
          "branch_code": "SSLHO",
          "image_type": "PDF",
          "document_classified": true
        },
        "Signature": {
          "image_code": "Signature",
          "image_data": "<base64_data>",
          "global_flag": "GLOBAL",
          "branch_code": "SSLHO",
          "image_type": "JPG"
        },
        "VOTER_ID": {
          "image_code": "Voters Identity Card",
          "image_data": "<base64_data>",
          "global_flag": "",
          "branch_code": "CPUR001BR",
          "image_type": "JPG",
          "document_classified": false
        }
      }
    }
  }
}

Advanced OCR

Hyperstream seamlessly combines image pre-processing, document classification, and document text extraction to offer you an advanced OCR solution like never before.

Features and Capabilities

1. Easy Integration:

Seamlessly integrate Hyperstream into your applications, platforms, or workflows with a straightforward API request.

2. Comprehensive Document Recognition:

Hyperstream can identify the following documents:

  • Passport
  • Aadhaar
  • Driving License
  • PAN
  • Voter ID
  • A wide variety of Proof of Aadhaar (POA) from CKYC
  • EPAN retrieved from DigiLocker and CKYC

3. Image Pre-processing:

Improve the accuracy of OCR results with advanced image pre-processing techniques.

4. Document Classification:

Hyperstream automatically categorizes the recognized documents, making it easy to extract specific information.

5. Document Text Extraction:

Extract key information such as names, IDs, dates of birth, and more from recognized documents.

API Usage

To get started with Hyperstream, simply make a POST request with the following request body:

Sample Request & Response

{
    "reference_id": "DEC001",
    "consent": true,
    "consent_purpose": "To onboard user into the platform",
    "hyperstream": "ADVANCED_OCR",
    "initial_input": {
        "image": "<base_64>"
    }
}
{
    "decentro_txn_id": "XXXXXXXXXXXXXXXX",
    "status": "SUCCESS",
    "http_status_code": 200,
    "response_key": "success_hyperstream",
    "data": {
        "ADVANCED_OCR": {
            "AADHAAR": {
                "ocr_status": true,
                "data": {
                    "id_type": "AADHAAR",
                    "id_number": "XXXXXXXX0240",
                    "full_name": "John Doe",
                    "father_name": "John Doe Sr.",
                    "gender": "MALE",
                    "dob": "05-12-1980",
                    "address": "456 Elm Street, Townsville",
                    "kyc_date": "20-06-2023",
                    "vid": "9876543210",
                    "son_of": "John Doe Sr.",
                    "husband_of": "",
                    "id_image": "https://example.com/aadhaar-image.jpg"
                }
            }
        }
    },
    "message": "Successfully completed hyperstream",
    "reference_id": "XXXXXXXXXXXXX"
}

CKYC Prefill

The CKYC Prefill Hyperstream takes the minimum possible input from the user, i.e., the name and phone number. Following this, the Hyperstream fetches all the documents of the user present in the CKYC Registry.

πŸ“˜

This API works best in production environment.

Due to the nature of the underlying APIs such as Credit Bureau, this API works best in the production environment where there are considerably higher data points to work with.

πŸ‘

The full_name parameter is optional

If the name is not provider, the CKYC_Prefill HyperStream automatically deduces the name of the given mobile number. This however an optional field. In any case where the HyperStream is not able to deduce the name of the mobile number, you can retry the HyperStream with the name.

The full_name parameter is made optional to ensure the maximum conversion rate.

The steps of the Hyperstream are mentioned below:

  1. If the optional full_name is not provided in the HyperStream request body, the HyperStream deduces the name and pushes it to the next step, i.e. the customer data pull module.
  2. Using the mobile_number and full_name of the user, Decentro uses the customer data pull API to extract an ID number and the DOB required for the authentication factor in future steps.
  3. Using the ID number, Decentro uses the CKYC search API to fetch the 14-digit CKYC Number
  4. Using the CKYC Number retrieved from step 2, and the DOB and other authentication factors retrieved from step 2, Decentro fetches the customer's records in the CKYC Registry.

Sample Request & Response

{
    "reference_id": "DEC001",
    "hyperstream": "CKYC_PREFILL",
    "consent": true,
    "consent_purpose": "To onboard user into platform",
    "initial_input": {
        "full_name": "JOHN DOE",   // THIS IS AN OPTIONAL FIELD
        "mobile_number": "9999999999"
    }
}
{
    "decentro_txn_id": "XXXXXXXXXXXX",
    "status": "SUCCESS",
    "http_status_code": 200,
    "response_key": "success_hyperstream",
    "data": {
        "CKYC_SEARCH_AND_DOWNLOAD": {
            "id_type": "CKYC",
            "identity_number": "XXXXXXXXXXXX",
            "auth_factor_type": 1,
            "auth_factor": "YYYY-MM-DD",
            "personal_details": {
                "constituiton_type": "Individual",
                "account_type": "Normal",
                "ckyc_no": "XXXXXXXXXXXX",
                "prefix": "MR",
                "first_name": "XXXXXX",
                "last_name": "XXXXXXX",
                "full_name": "XXXXXXX",
                "maiden_prefix": "MR",
                "maiden_fullname": "MR",
                "father_or_spouse": "XXXXX",
                "father_prefix": "MR",
                "father_fname": "XXXXX",
                "father_lname": "XXXXX",
                "father_fullname": "XXXXXXXXX",
                "mother_prefix": "MRS",
                "mother_fname": "XXXXX",
                "mother_lname": "XXXXXX",
                "mother_fullname": "XXXXXX",
                "gender": "MALE",
                "dob": "DD-MM-YYYY",
                "pan": "XXXXXX",
                "perm_line1": "XXXXXXXXX",
                "perm_line2": "XXXXXXX",
                "perm_line3": "XXXXX",
                "perm_city": "XXXXX",
                "perm_dist": "XXXXX",
                "perm_state": "XX",
                "perm_country": "XX",
                "perm_pin": "XXXXX",
                "perm_poa": "Proof of Possession of Aadhaar",
                "perm_corres_sameflag": "Y",
                "corres_line1": "XXXXX",
                "corres_line2": "XXXX",
                "corres_line3": "XXXX",
                "corres_city": "XXXX",
                "corres_dist": "XXXXX",
                "corres_state": "XX",
                "corres_country": "XX",
                "corres_pin": "XXXX",
                "mob_code": "91",
                "mob_num": "XXXXX",
                "email": "XXXXX",
                "remarks": "ADDL FILE",
                "dec_date": "DD-MM-YYYY",
                "dec_place": "XXXXXXX",
                "kyc_date": "********",
                "doc_sub": "Certified Copies",
                "kyc_name": "********",
                "kyc_designation": "********",
                "kyc_branch": "********",
                "kyc_empcode": "********",
                "num_identity": "0",
                "num_related": "0",
                "num_images": "5",
                "permanent_address": "XXXXX",
                "corresponding_address": "XXXXX"
            },
            "image_details": {
                "Photograph": {
                    "image_code": "Photograph",
                    "image_data": "<base64>",
                    "global_flag": "1",
                    "branch_code": "ISECHO",
                    "image_type": "JPG"
                },
                "PAN": {
                    "image_code": "PAN",
                    "image_data": "<base64>",
                    "global_flag": "1",
                    "branch_code": "ISECHO",
                    "image_type": "JPG"
                },
                "PASSPORT": {
                    "image_code": "Passport",
                    "image_data": "<base64>",
                    "global_flag": "GLOBAL",
                    "branch_code": "ISECHO",
                    "image_type": "PDF"
                },
                "Signature": {
                    "image_code": "Signature",
                    "image_data": "<base64>",
                    "global_flag": "1",
                    "branch_code": "ISECHO",
                    "image_type": "JPG"
                },
                "AADHAAR": {
                    "image_code": "Proof of Possession of Aadhaar",
                    "image_data": "<base64>",
                    "global_flag": "1",
                    "branch_code": "SBIPRODBR",
                    "image_type": "JPG"
                }
            }
        }
    },
    "message": "Successfully completed hyperstream",
    "reference_id": "XXXXX"
}

CKYC Matching

The CKYC Matching Hyperstream will perform the following functions:

  • CKYC search using the initial_input. If the user is not found in CKYC Search, the flow ends and the same is informed to the customer in the response message.
  • If the user is found from the CKYC Search, use the ckycId received from the CKYC Search API and hit CKYC Download API with perform_ocr parameter set to true
  • If download data not found, then the flow ends. If the CKYC Download data is found, the following documents to be checked to perform OCR:
    • PAN
    • Aadhaar
  • If none of the above documents are found, then next priority documents to be checked to perform OCR:
    • Passport
    • Driving License
    • Voter ID
  • Mandatorily two documents to undergo through OCR. If only one document is present, only one OCR to be done. If more than two documents are present, only two OCRs to be done based on the priority.
  • Once the OCR is done, the matching logic to be performed based on the checks at Decentro level
  • After performing all matching and logic, response to be shown to the customer along with mandatory and informatory parameters
  • Send the collective response back to the user. Flow ends.

Since this Hyperstream utilises the Matching Module, the input requires a mandatory object called matching_input. Using the matching_input you can match the following fields with the input provided by the user:

  • full_name: string, optional
  • father_name: string, optional
  • dob: string, optional
  • permanent_address: string, optional
  • communication_address: string, optional
  • pincode: string, optional
  • gender: string, optional
  • mobile_last_four_digits: string, optional

Sample Contracts

{
    "reference_id": "DEC001",
    "consent": true,
    "consent_purpose": "To onboard user into platform",
    "hyperstream": "CKYC_MATCHING",
    "initial_input": {
        "document_type": "PAN",
        "id_number": "START1000X",
        "auth_factor_type": 1,
        "auth_factor": "1975-01-01"
    },
    "matching_input": {
        "full_name": {
            "value": "Luke Skywalker",
            "threshold": 75
        },
        "father_name": {
            "value": "Darth Vader",
            "threshold": 75
        },
        "permanent_address": {
            "value": "Central Street",
            "threshold": 75
        },
        "gender": {
            "value": "FEMALE",
            "threshold": 75
        }
    }
}
{
    "decentro_txn_id": "XXXXXXXXXXXXXXXXX",
    "status": "SUCCESS",
    "http_status_code": 200,
    "response_key": "success_hyperstream",
    "data": {
        "CKYC_SEARCH_AND_DOWNLOAD": {
            "gender": {
                "status": true,
                "message": "Match successful",
                "match_percentage": 100
            },
            "full_name": {
                "status": true,
                "message": "Match successful",
                "match_percentage": 90
            },
            "father_name": {
                "status": false,
                "message": "Match failed",
                "match_percentage": 69
            },
            "permanent_address": {
                "status": false,
                "message": "Match failed",
                "match_percentage": 14
            }
        },
        "OCR": {
            "AADHAAR": {
                "gender": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 0
                },
                "full_name": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 0
                },
                "father_name": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 0
                },
                "permanent_address": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 0
                }
            },
            "PASSPORT": {
                "gender": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 40
                },
                "full_name": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 44
                },
                "father_name": {
                    "status": false,
                    "message": "Data not found with source",
                    "match_percentage": 0
                },
                "permanent_address": {
                    "status": false,
                    "message": "Match failed",
                    "match_percentage": 36
                }
            }
        }
    },
    "message": "Successfully Completed Hyperstream",
    "reference_id": "XXXXXXXXXX"
}