Credit SDK by Aarthik Labs

Request-Response Model

We will be communicating data through web-hooks, call-backs, and events in a specific request and response model format. The following is how requests and responses will show up while integrating Aarthik Labs Credit SDK:

Request

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    provider_id: // This should be unique per borrower (per mobile number) and needs to be provided by the Tenant every time the SDK needs to be invoked.
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber[*]: // (Mandatory field) E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    };
  };
};

Response

1. Journey Started

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: { // Whatever is shared in the Request, will be passed to the tenant back in the form of Response
      Personal: {
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
    },
    journeys: [
      {}, // This array will contain all the old journeys of the borrower
      {}, // if the borrower is existing
      {}, // else it will contain just the newly created journey
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: `STARTED`,
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: `PENDING`,
      },
    ],
  },
};

2. Application Data Collected

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: { // Whatever is submitted by the Borrower, will be passed to the tenant back in the form of Response
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {}, // This array will contain all the old journeys of the borrower
      {}, // if the borrower is existing
      {}, // else it will contain just the newly created journey
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: `PROFILED`,
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: `PENDING`,
      },
    ],
  },
};

3. Offered

In case, no offer is received, the array will be empty.

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "OFFERED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: false,
            expired: true | false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
          },
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: false,
            expired: true | false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
          },
        ],
      },
    ],
  },
};

// NO OFFER

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "NOT_OFFERED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [],
      },
    ],
  },
};

4. Offer Selected

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "OFFER_SELECTED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        borrower_preferred_amount: // Borrower’s preferred loan amount. *Example:* `200000`,
        borrower_preferred_tenure: // Borrower’s preferred tenure in months. *Example:* `12`,
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: false,
            expired: false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
          },
        ],
      },
    ],
  },
};

5. Offer Accepted

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "OFFER_ACCEPTED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        borrower_preferred_amount: // Borrower’s preferred loan amount. *Example:* `200000`,
        borrower_preferred_tenure: // Borrower’s preferred tenure in months. *Example:* `12`,
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [ // Offer array may be updated with the revised offer amount (borrower preferred).
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: true,
            expired: false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
          },
        ],
      },
    ],
  },
};

6. Lender Redirected

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "LENDER_REDIRECTED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        lender_mode: "OFFLINE" | "ONLINE",
        kyc_status: `PENDING` | `SUCCESS` | `FAILURE`,
        kyc_attempts: 1,
        emandate_status: `PENDING` | `SUCCESS` | `FAILURE`,
        emandate_attempts: 0,
        esign_status: `PENDING` | `SUCCESS` | `FAILURE`,
        esign_attempts: 0,
        change_in_offer: true | false,
        borrower_preferred_amount: // Borrower’s preferred loan amount. *Example:* `200000`,
        borrower_preferred_tenure: // Borrower’s preferred tenure in months. *Example:* `12`,
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [ // Offer array may be updated with the revised offer amount (borrower preferred).
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: true,
            expired: false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
          },
        ],
      },
    ],
  },
};

7. Disbursed

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "DISBURSED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        lender_mode: "OFFLINE" | "ONLINE",
        kyc_status: `SUCCESS`,
        kyc_attempts: 1,
        emandate_status: `SUCCESS`,
        emandate_attempts: 1,
        esign_status: `SUCCESS`,
        esign_attempts: 1,
        change_in_offer: true | false,
        borrower_preferred_amount: // Borrower’s preferred loan amount. *Example:* `200000`,
        borrower_preferred_tenure: // Borrower’s preferred tenure in months. *Example:* `12`,
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [ // Offer array may be updated with the revised offer amount (borrower preferred).
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: true,
            expired: false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
            installments: [
              {
                serial_number: 1 (can be 1 to X, where X = no. of installments),
                type: `INSTALLMENT`,
                amount: // *Example:* `18700`,
                status: // *Example:* "PAID" | "OVERDUE" | "NOT-DUE",
                installment_due_date: // Installment due date. *Example:* `2026-02-05T00:00:00Z`,
              },
              {
                serial_number: 2 (can be 1 to X, where X = no. of installments),
                type: `INSTALLMENT`,
                amount: // *Example:* `18700`,
                status: // *Example:* "PAID" | "OVERDUE" | "NOT-DUE",
                installment_due_date: // Installment due date. *Example:* `2026-02-05T00:00:00Z`,
              },
            ],
          },
        ],
      },
    ],
  },
};

8. Collections Update

This is a frequent status update (via web-hooks, call-backs, events) for disbursed loans.

{
  tenant_id: string; // Tenant ID shall be provided by AL
  application_id: string; // Application ID shall be provided by AL
  borrower: {
    id: // AL generated borrower ID *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
    tenant_id: string; // Tenant ID shall be provided by AL
    application_id: string; // Application ID shall be provided by AL
    provider_id: // Tenant-provided borrower identifier (unique per borrower, usually per mobile number). *Example:* `cust_9876543210`,
    profile: {
      Personal: {
        panName: // (max 3 words accepted) The borrower’s full name exactly as it appears on their PAN record. *Example:* `Rahul Kumar Sharma`,
        dob: // this needs to be a valid ISO 8601 date (Example: YYYY-MM-DDThh:mm:ss.000Z — 2026-01-01T11:59:00.018Z (timestamp is optional, a default value of 00:00:00.000 can be used.) *Example:* `1994-08-17T00:00:00.000Z`,
        gender: // *Example:* `male`, `female` and `transgender`,
        personalemail: // (should contain at least an "@") *Example:* `rahul.sharma@gmail.com`,
        pan: // PAN-regex must be followed *Example:* `ABCDE1234F`,
        contactNumber: // E.164 format accepted (+91 is the only accepted country code. Post that, 10 digits accepted. Final length should be a max of 13 characters. Authenticated number should only be passed.) *Example:* `+919876543210`,
      },
      Work: {
        employmentType: // The borrower’s primary mode of employment or income generation. Used to determine eligibility logic, document requirements, and lender routing (e.g. salaried vs self-employed). *Example:* `salaried`,
        officialemail: // (should contain at least an "@", should not be a common e-mail like @gmail.com, @hotmail.com, @yahoo.com, etc.). *Example:* `rahul.sharma@acmecorp.in`,
        income: // (should be a valid positve integer, no commas, ) The borrower’s declared or computed income, expected as a monthly amount. *Example:* `75000`,
        companyName: // Name of the employer or business entity the borrower is associated with. *Example:* `Acme Technologies Pvt Ltd`,
        udyamNumber: // Adhere to Udyam Number RegEx. The borrower’s Udyam Registration Number, applicable only for self-employed or MSME borrowers. *Example:* `Udyam-KA-05-0123456`,
      },
      Address: {
        addressL1: // *Example:* `Flat 302, Shanti Apartments`,
        addressL2: // *Example:* `Near MG Road Metro Station`,
        city: // *Example:* `Rajkot`,
        state: // *Example:* `Gujarat`,
        pincode: // *Example:* `360001`,
      },
    },
    journeys: [
      {
        id: // Internal ID for this journey (one borrower can have multiple). *Example:* `jrn_1b2c3d4e-55aa-4b21-9c11-7dd2e1b8a0ab`,
        ondc_transaction_id: // Unique ONDC transaction identifier for protocol-level correlation. *Example:* `c0a8012e-7b2f-4f2a-9e31-2f1e0c3a1a22`,
        created: // When journey was created. *Example:* `2026-01-05T12:45:00Z`,
        updated: // Last update timestamp for journey state machine. *Example:* `2026-01-05T13:20:12Z`,
        tenant_id: string; // Tenant ID shall be provided by AL
        application_id: string; // Application ID shall be provided by AL
        borrower_id: // Borrower foreign key for this journey. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
        type: `PERSONAL_LOAN`,
        status: "DISBURSED",
        activity_status: "ACTIVE" | "IDLE" | "INACTIVE",
        decision_status: "APPROVED" | "NOT-APPROVED",
        lender_mode: "OFFLINE" | "ONLINE",
        kyc_status: `SUCCESS`,
        kyc_attempts: 1,
        emandate_status: `SUCCESS`,
        emandate_attempts: 1,
        esign_status: `SUCCESS`,
        esign_attempts: 1,
        change_in_offer: true | false,
        borrower_preferred_amount: // Borrower’s preferred loan amount. *Example:* `200000`,
        borrower_preferred_tenure: // Borrower’s preferred tenure in months. *Example:* `12`,
        lender_mode: "ONLINE" | "OFFLINE",
        lenders: [
          {
            id: // *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Lender record created timestamp. *Example:* `2026-01-05T12:50:10Z`,
            tenant_id: // Tenant partition key. *Example:* `tnt_2f6c1a9b7d`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            offer_id: // Offer FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // ONDC correlation ID for lender-level interaction. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            data: // *Example:* `[ { "on_search": { "...": "..." } } ]`,
            lender_name: // Lender name. *Example:* `Lender XYZ NBFC`,
            lender_gro_name: // Grievance Redressal Officer name (required). *Example:* `Priya Menon`,
            lender_gro_email: // GRO email. *Example:* `gro@lenderxyz.com`,
            lender_gro_contact_number: // GRO contact number. *Example:* `+91-80-40001234`,
            lender_gro_designation: // GRO designation/title. *Example:* `Grievance Redressal Officer`,
            lender_gro_address: // GRO address. *Example:* `4th Floor, Business Park, Bengaluru, KA 560001`,
            lender_customer_support_link: // Support URL. *Example:* `https://lenderxyz.com/support`,
            lender_customer_support_contact_number: // Support number. *Example:* `1800-123-456`,
            lender_customer_support_email: // Support email. *Example:* `support@lenderxyz.com`,
          },
        ],
        offers: [ // Offer array may be updated with the revised offer amount (borrower preferred).
          {
            id: // Internal offer record ID. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            created: // Offer created timestamp. *Example:* `2026-01-05T12:55:00Z`,
            updated: // Offer updated timestamp. *Example:* `2026-01-05T13:10:30Z`,
            tenant_id: // Tenant partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            application_id: // Application partition key. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            borrower_id: // Borrower FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            journey_id: // Journey FK. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            lender_id: // Lender FK for this offer. *Example:* `8D8AC610-566D-4EF0-9C22-186B2A5ED793`,
            ondc_transaction_id: // Offer-level ONDC correlation ID. *Example:* `0b2c3d4e-5f60-4a7b-8c9d-001122334455`,
            accepted: true,
            expired: false,
            type: // *Example:* `PERSONAL_LOAN`,
            amount_principal: // Principal amount. *Example:* `200000`,
            amount_total_interest_payable: // Total interest payable over tenure. *Example:* `24000`,
            amount_net_disbursed_amount: // *Example:* `196500`,
            offer_term: // *Example:* `12 months`,
            interest_rate: // *Example:* `12.50`,
            interest_type: // *Example:* `Fixed` / `reducing`,
            annual_percentage_rate: // *Example:* `14.75%`,
            number_of_installments: // *Example:* `12`,
            cool_off_period: // *Example:* `3 days`,
            terms_and_conditions_link: // URL to T&C. *Example:* `https://lenderxyz.com/tnc/loan`,
            key_facts_statement_link: // URL to KFS. *Example:* `https://lenderxyz.com/kfs/loan`,
            application_fees: // *Example:* `₹0`,
            foreclosure_fees: // *Example:* `2%`,
            interest_rate_conversion_charges: // *Example:* `500 INR`,
            delay_penalty_fees: // *Example:* `5%`,
            other_penalty_fees: // *Example:* `1%`,
            processing_fees: // *Example:* `1800`,
            other_upfront_charges: // *Example:* `100`,
            insurance_charges: // *Example:* `100`,
            other_charges: // *Example:* `1000`,
            last_installment_date: // *Example:* `2026-02-05T00:00:00Z`,
            last_installment_status: // *Example:* "PAID" | "OVERDUE",
            installments: [
              {
                serial_number: 1 (can be 1 to X, where X = no. of installments),
                type: `INSTALLMENT`,
                amount: // *Example:* `18700`,
                status: // *Example:* "PAID" | "OVERDUE" | "NOT-DUE",
                installment_due_date: // Installment due date. *Example:* `2026-02-05T00:00:00Z`,
              },
              {
                serial_number: 2 (can be 1 to X, where X = no. of installments),
                type: `INSTALLMENT`,
                amount: // *Example:* `18700`,
                status: // *Example:* "PAID" | "OVERDUE" | "NOT-DUE",
                installment_due_date: // Installment due date. *Example:* `2026-02-05T00:00:00Z`,
              },
            ],
          },
        ],
      },
    ],
  },
};

On this page