> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.credit.aarthiklabs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.credit.aarthiklabs.com/_mcp/server.

# Read Offer (And Hand-Off URL)

GET https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/{borrowerProviderID}/journey/offers/{offerID}/hosted

Backend-only API-key call. Use after the borrower selects an offer in your UI. Pass the Start response `data.journey.id` as `journeyID` so the handoff continues the intended application attempt. Offer acceptance is controlled by Aarthik Labs configuration scoped to the tenant, application, and lender; the configured value wins and defaults to enabled when no policy exists. The deprecated `isOfferAccepted` query parameter is ignored. Inspect `offer_acceptance.requested` for the effective server decision and `offer_acceptance.applied` for this call's outcome. Open the returned short-lived Aarthik Labs URL immediately. For pending external lender steps it displays a minimal unbranded loader, waits internally, and automatically forwards the borrower when the canonical lender URL is ready; the integrator does not poll this third API. A single-redirection journey forwards to the lender destination, while a multiple-redirection journey forwards to the current external stage such as KYC. The borrower does not need to click Verify or an Aarthik Labs button. For completed or terminal stages the URL opens the Hosted offer and journey tracker for status, offer details, and servicing. Repeating the same request is safe and returns a fresh continuation URL. If `journeyID` is omitted, borrower-only fallback is legacy behavior and may return a 409 ambiguity error when the same borrower has multiple active Hybrid application attempts.

Reference: https://docs.credit.aarthiklabs.com/api-reference/hybrid-experience/personal-loans/get-hybrid-hosted-experience-url

## Authentication

- `Authorization` header (bearer token, required) — Send `Authorization: Bearer <PLATFORM_API_KEY>` from a trusted back-end.

## Servers

- `https://credit.aarthiklabs.com` (Production, default)
- `https://preprod.credit.aarthiklabs.com` (PreProduction)

## Request

### Path parameters

- `borrowerProviderID` (string, required) — Stable borrower identity from the partner system. Keep a 1:1 mapping between the borrower and `borrowerProviderID` across sessions and application attempts to preserve resume, history, and post-disbursal continuity.
- `offerID` (string, required) — Offer identifier returned in `data.lenders.<lenderName>.offers[].offerID`.

### Query parameters

- `journeyID` (string, optional) — Journey ID returned as `data.journey.id` by Start. Send this on Offers and Hosted handoff calls to continue the intended application attempt. The `journey_id` query parameter and `x-aarthiklabs-journey-id` header aliases are also accepted. If more than one alias is sent, all values must match.
- `isOfferAccepted` (string, optional, deprecated) — Deprecated compatibility parameter. Its value is ignored; Aarthik Labs server configuration determines the effective offer-acceptance decision.

### Headers

- `x-correlation-id` (string, optional) — Optional caller-supplied trace identifier. When omitted, the API generates one and mirrors it as `correlation_id`.

## Response

### 200

Hosted entrypoint for review, an internal loader, the current lender step, or completed-journey re-entry.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (HybridHostedURLData, required)
- `error` (any, required)

## Errors

### 400 Bad Request Error

Request body or path validation failed.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

### 401 Unauthorized Error

Missing or invalid platform API key.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

### 404 Not Found Error

Borrower, journey, route, or offer was not found for the authenticated application scope.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

### 409 Conflict Error

The current journey or offer state does not allow the requested transition.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

### 429 Too Many Requests Error

Too many requests. For offer polling, retry at the returned `polling.nextPoll` timestamp.

- `GetHybridHostedExperienceUrlRequestTooManyRequestsError`
  - HybridErrorResponse: HybridErrorResponse
  - HybridOfferPollingRateLimitedResponse: HybridOfferPollingRateLimitedResponse

### 500 Internal Server Error

Temporary upstream or platform failure.

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

## Types

### HybridHostedURLData

- `hosted_url` (string, required, nullable) — Short-lived Hosted Experience entry URL. Null while automatic Personal Loan preparation or a lender stage is pending. Open immediately when present.
- `expires_at` (datetime, required, nullable)
- `target_offer_id` (string, required)
- `target_journey_id` (string, required)
- `journey` (HybridHostedJourney, required)
- `offer_acceptance` (HybridHostedOfferAcceptanceOutcome, optional) — Present only when `isOfferAccepted=true`. Inspect `applied` before using redirection or polling metadata.
- `redirection` (HybridHostedRedirection, optional, nullable) — Present only when isOfferAccepted=true. For automatic Personal Loan preparation, PENDING means the caller must poll the same original offer until READY. Null means no next borrower action.
- `polling` (HybridHostedAcceptancePolling, optional)

### HybridError

- `code` (enum, required)
  - Allowed values: `VALIDATION_FAILED`, `AUTH_INVALID_API_KEY`, `AUTH_INVALID_SESSION`, `ACCESS_SCOPE_MISMATCH`, `RESOURCE_NOT_FOUND`, `OFFER_LOCK_CONFLICT`, `STATE_PRECONDITION_FAILED`, `OFFER_POLL_RATE_LIMITED`, `HYBRID_JOURNEY_NOT_READY`, `RATE_LIMITED`, `UPSTREAM_TEMPORARY_FAILURE`
- `message` (string, required)
- `retryable` (boolean, required) — Whether retrying the same operation can make progress. A persisted final primary-form failure is not retryable, including HTTP 500; reconcile the accepted operation before any resubmission. Correct invalid input before retrying validation failures.
- `details` (map from string to any, required, nullable)

### HybridErrorResponse

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (any, required)
- `error` (HybridError, required)

### HybridOfferPollingRateLimitedResponse

- `request_id` (string, required)
- `correlation_id` (string, required)
- `timestamp` (datetime, required)
- `data` (HybridOfferPollingRateLimitedResponseData, required)
- `error` (HybridError, required)

### HybridHostedJourney

- `id` (string, required) — Aarthik Labs journey ID. Matches `data.journey.id` in lifecycle web-hooks for the same borrower journey.
- `endUse` (enum, optional, nullable)
  - Allowed values: `consumerDurablePurchase`, `education`, `travel`, `health`, `marriage`, `familyFunctions`, `medicalTreatmentAndEmergencies`, `travelEducationExpenses`, `businessExpansion`, `agricultureAndFarmRelatedNeeds`, `purchaseOfEquipment`, `other`
- `bureauConsent` (boolean, optional, nullable)
- `ondc_transaction_id` (string, optional, nullable)
- `type` (enum, optional)
  - Allowed values: `PERSONAL_LOAN`, `BUSINESS_LOAN`, `GOLD_LOAN`, `LAMF_LOAN`
- `status` (enum, optional, nullable)
  - Allowed values: `STARTED`, `NOT_PROFILED`, `PROFILED`, `OFFERED`, `NOT_OFFERED`, `OFFER_ACCEPTED`, `LENDER_REDIRECTED`, `REJECTED`, `DISBURSED`, `EXPIRED`
- `kyc_status` (enum, optional)
  - Allowed values: `PENDING`, `SUCCESS`, `FAILURE`
- `kyc_attempts` (integer, optional, nullable)
- `emandate_status` (enum, optional)
  - Allowed values: `PENDING`, `SUCCESS`, `FAILURE`
- `emandate_attempts` (integer, optional, nullable)
- `esign_status` (enum, optional)
  - Allowed values: `PENDING`, `SUCCESS`, `FAILURE`
- `esign_attempts` (integer, optional, nullable)
- `lender` (HybridHostedLender, optional)
- `offer` (HybridHostedOffer, optional)

### HybridHostedOfferAcceptanceOutcome

Present only when `isOfferAccepted=true`. Inspect `applied` before using redirection or polling metadata.

- `requested` (boolean, required) — True when the caller supplied exact lowercase isOfferAccepted=true.
- `applied` (boolean, required) — True when API acceptance is in effect for the selected offer, including when an earlier successful request already applied it.
- `mode` (enum, required) — Acceptance result classification returned for compatibility. Integrations should make flow decisions using `applied`.
  - Allowed values: `API_ALLOWED`, `HOSTED_REQUIRED`, `LEGACY_API_ALLOWED`

### HybridHostedRedirection

- `type` (enum, required)
  - Allowed values: `SINGLE`, `MULTIPLE`
- `stage` (enum, required)
  - Allowed values: `LENDER_REDIRECTION`, `KYC`, `BANK_MANDATE`, `E_MANDATE`, `LOAN_AGREEMENT`
- `state` (enum, required)
  - Allowed values: `READY`, `PENDING`, `TERMINAL`

### HybridHostedAcceptancePolling

- `shouldPoll` (boolean, required) — When true, repeat the same Hosted handoff request using the original offer ID after nextPoll. Do not replace the request path with target_offer_id.
- `lastPoll` (datetime, required)
- `nextPoll` (datetime, required, nullable) — Initially five seconds after lastPoll while polling remains enabled.

### HybridOfferPollingRateLimitedResponseData

- `polling` (HybridPolling, required)

### HybridHostedLender

- `id` (string, optional, nullable)
- `lender_name` (string, optional, nullable)
- `lender_gro_name` (string, optional, nullable)
- `lender_gro_email` (string, optional, nullable)
- `lender_gro_contact_number` (string, optional, nullable)
- `lender_gro_designation` (string, optional, nullable)
- `lender_gro_address` (string, optional, nullable)
- `lender_customer_support_link` (string, optional, nullable)
- `lender_customer_support_contact_number` (string, optional, nullable)
- `lender_customer_support_email` (string, optional, nullable)

### HybridHostedOffer

- `productType` (enum, optional) — Actual product behind a Business Hybrid selection.
  - Allowed values: `BUSINESS_LOAN`, `PERSONAL_LOAN`
- `id` (string, optional, nullable)
- `accepted` (boolean, optional, nullable)
- `expired` (boolean, optional, nullable)
- `amountPrincipal` (string, optional, nullable)
- `amountTotalInterestPayable` (string, optional, nullable)
- `amountNetDisbursedAmount` (string, optional, nullable)
- `offerTerm` (string, optional, nullable)
- `interestRate` (string, optional, nullable)
- `interestType` (string, optional, nullable)
- `annualPercentageRate` (string, optional, nullable)
- `numberOfInstallments` (integer, optional, nullable)
- `coolOffPeriod` (string, optional, nullable)
- `termsAndConditionsLink` (string, optional, nullable)
- `keyFactsStatementLink` (string, optional, nullable)
- `applicationFees` (string, optional, nullable)
- `foreclosureFees` (string, optional, nullable)
- `interestRateConversionCharges` (string, optional, nullable)
- `delayPenaltyFees` (string, optional, nullable)
- `otherPenaltyFees` (string, optional, nullable)
- `processingFees` (string, optional, nullable)
- `otherUpfrontCharges` (string, optional, nullable)
- `insuranceCharges` (string, optional, nullable)
- `otherCharges` (string, optional, nullable)
- `installments` (list of map from string to any, optional)

### HybridPolling

- `shouldPoll` (boolean, required)
- `lastPoll` (datetime, required)
- `nextPoll` (datetime, required)

## Examples

### success

**Response**

```json
{
  "request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "correlation_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "timestamp": "1970-01-01T00:00:00.000Z",
  "data": {
    "hosted_url": "https://preprod.credit.aarthiklabs.com/lab/handoff?handoff=xxXxxX0x0x...#bt_test_xxx000",
    "expires_at": "1970-01-01T00:15:00.000Z",
    "target_offer_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "target_journey_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "journey": {
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "endUse": "travel",
      "bureauConsent": true,
      "ondc_transaction_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "PERSONAL_LOAN",
      "status": "OFFER_ACCEPTED",
      "kyc_status": "PENDING",
      "kyc_attempts": 0,
      "emandate_status": "PENDING",
      "emandate_attempts": 0,
      "esign_status": "PENDING",
      "esign_attempts": 0,
      "lender": {
        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "lender_name": "ONDC Bank",
        "lender_gro_name": "ONDC",
        "lender_gro_email": "lifeline@ondc.com",
        "lender_gro_contact_number": "1860 266 7766",
        "lender_gro_designation": "Nodal Grievance Redressal Officer",
        "lender_gro_address": "One Indiabulls Centre, Mumbai",
        "lender_customer_support_link": "https://buy.ondc.org/buy/GrievanceRedStep.htm?execution=e1s1",
        "lender_customer_support_contact_number": "1800 1080",
        "lender_customer_support_email": "customer.care@ondc.com"
      },
      "offer": {
        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "accepted": true,
        "expired": false,
        "amountPrincipal": "400000",
        "amountTotalInterestPayable": "42300",
        "amountNetDisbursedAmount": "392000",
        "offerTerm": "5 months",
        "interestRate": "12.00",
        "interestType": "FIXED",
        "annualPercentageRate": "5.00",
        "numberOfInstallments": 5,
        "coolOffPeriod": "3 days",
        "termsAndConditionsLink": "https://example.com/tnc.pdf",
        "keyFactsStatementLink": "https://example.com/kfs.pdf",
        "applicationFees": "0",
        "foreclosureFees": "0",
        "interestRateConversionCharges": "0",
        "delayPenaltyFees": "0",
        "otherPenaltyFees": "0",
        "processingFees": "8000",
        "otherUpfrontCharges": "0",
        "insuranceCharges": "0",
        "otherCharges": "0",
        "installments": []
      }
    },
    "offer_acceptance": {
      "requested": true,
      "applied": true,
      "mode": "API_ALLOWED"
    },
    "redirection": {
      "type": "SINGLE",
      "stage": "LENDER_REDIRECTION",
      "state": "READY"
    },
    "polling": {
      "shouldPoll": false,
      "lastPoll": "1970-01-01T00:00:00.000Z",
      "nextPoll": null
    }
  },
  "error": null
}
```

**SDK Code**

```python success
import requests

url = "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted"

querystring = {"journeyID":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","isOfferAccepted":"true"}

headers = {
    "x-correlation-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "Authorization": "Bearer <token>"
}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript success
const url = 'https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true';
const options = {
  method: 'GET',
  headers: {
    'x-correlation-id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    Authorization: 'Bearer <token>'
  }
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go success
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby success
require 'uri'
require 'net/http'

url = URI("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-correlation-id"] = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java success
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")
  .header("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php success
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'x-correlation-id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  ],
]);

echo $response->getBody();
```

```csharp success
using RestSharp;

var client = new RestClient("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true");
var request = new RestRequest(Method.GET);
request.AddHeader("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift success
import Foundation

let headers = [
  "x-correlation-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Authorization": "Bearer <token>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Automatic Personal Loan preparation is pending

**Response**

```json
{
  "request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "correlation_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "timestamp": "1970-01-01T00:00:00.000Z",
  "data": {
    "hosted_url": "https://preprod.credit.aarthiklabs.com/lab/handoff?handoff=xxXxxX0x0x...#bt_test_xxx000",
    "expires_at": "1970-01-01T00:15:00.000Z",
    "target_offer_id": "original-offer-id",
    "target_journey_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "journey": {
      "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "PERSONAL_LOAN",
      "status": "OFFER_ACCEPTED",
      "offer": {
        "id": "original-offer-id",
        "accepted": true,
        "expired": false,
        "amountPrincipal": "400000"
      }
    },
    "offer_acceptance": {
      "requested": true,
      "applied": true,
      "mode": "API_ALLOWED"
    },
    "redirection": null,
    "polling": {
      "shouldPoll": false,
      "lastPoll": "1970-01-01T00:00:00.000Z",
      "nextPoll": null
    }
  },
  "error": null
}
```

**SDK Code**

```python Automatic Personal Loan preparation is pending
import requests

url = "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted"

querystring = {"journeyID":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","isOfferAccepted":"true"}

headers = {
    "x-correlation-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "Authorization": "Bearer <token>"
}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript Automatic Personal Loan preparation is pending
const url = 'https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true';
const options = {
  method: 'GET',
  headers: {
    'x-correlation-id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    Authorization: 'Bearer <token>'
  }
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Automatic Personal Loan preparation is pending
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Automatic Personal Loan preparation is pending
require 'uri'
require 'net/http'

url = URI("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-correlation-id"] = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java Automatic Personal Loan preparation is pending
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")
  .header("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php Automatic Personal Loan preparation is pending
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'x-correlation-id' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  ],
]);

echo $response->getBody();
```

```csharp Automatic Personal Loan preparation is pending
using RestSharp;

var client = new RestClient("https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true");
var request = new RestRequest(Method.GET);
request.AddHeader("x-correlation-id", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift Automatic Personal Loan preparation is pending
import Foundation

let headers = [
  "x-correlation-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "Authorization": "Bearer <token>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://credit.aarthiklabs.com/api/v1/hybrid/personal-loan/borrowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/journey/offers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/hosted?journeyID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&isOfferAccepted=true")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```