> 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.

# Business Loans

> Discover business credit offers and continue a selected offer with one integration.

Aarthik Labs' Credit API helps you offer business credit through one integration. Depending on your application and enabled lending partners, a Business Loan journey may return Business Loan offers and Personal Loan offers suitable for self-employed borrowers. Display the actual product shown by each offer's `productType`.

## Optional pre-offer capabilities

[Dedupe](/documentation/hybrid-experience/integrations-guide/business-loan-dedupe) checks participating lenders through an asynchronous POST-start and GET-read flow, with hashed and unhashed identifier examples. [Eligibility](/documentation/hybrid-experience/integrations-guide/eligibility-inputs) accepts Bureau, Banking or GST information independently or together. Eligibility results also include provisional APR, interest rate, principal amount and term where available; final offers come from offer discovery. Both stages are optional. Each starts with POST returning `202` and `data.journeyID`, then uses GET to read progress and lender decisions. Start responses contain no polling object. Make the first Fetch Results call after acceptance, then follow its `polling.nextPoll` until `polling.shouldPoll` is false before proceeding.

## Choose your sequence

| Sequence                                                              | How to retain one journey                                         |
| --------------------------------------------------------------------- | ----------------------------------------------------------------- |
| Dedupe (start → read) → Eligibility (start → read) → Create A Journey | Omit ID on Dedupe; pass its returned ID to both later POST calls. |
| Eligibility (start → read) → Create A Journey                         | Omit ID on Eligibility; pass its returned ID to Start.            |
| Dedupe (start → read) → Create A Journey                              | Omit ID on Dedupe; pass its returned ID to Start.                 |
| Create A Journey directly                                             | Omit ID on Start; store `data.journey.id` from its response.      |

On each continuation POST, supply `?journeyID=<same-journey-id>`. Poll offers and request handoff with that same ID. Keep the same `borrowerProviderID`; do not create a second public journey after a pre-offer check.

## Get started

1. From your back-end, call the Business Loan Create A Journey endpoint with the borrower and business details required by the [API Reference](/api-reference/hybrid-experience/business-loan/start-or-resume-hybrid-business-loan-journey). If you already have an ID from Dedupe or Eligibility, include it in the optional `journeyID` query parameter. Use a stable `borrowerProviderID` and a new `Idempotency-Key` for each application attempt. Reuse the key only for an exact retry.
2. Store `data.journey.id` from the response. Pass that value as `journeyID` when polling offers and requesting a Hosted handoff.
3. Poll for offers. Show available `OFFER_RECEIVED` offers with their actual product type and terms. More offers can arrive while `polling.shouldPoll` is true. Follow `polling.nextPoll` and stop when `shouldPoll` is false, or when the borrower chooses an available offer.
4. When the borrower selects an offer, request its Hosted handoff using the offer's `offerID` and the same `journeyID`. Open the returned short-lived `hosted_url` promptly. If it expires, request a fresh URL.

The Business Loan start request requires `personal`, `work`, `address`, `journey`, and `businessLoan`. The `businessLoan` object requires `constitution`, `businessPan`, `doi`, `natureOfBusiness`, `annualTurnover`, and `businessPincode`. Self-employed applicants must also provide a non-blank `work.udyamNumber`. See the API Reference for the full request and response contract.

Optional bureau information supplied in the start request has its own consent requirements. See [Buyer-Supplied Bureau Data](/documentation/common/buyer-supplied-bureau-data).

## Handle discovery and continuation

An empty or partial response while `polling.shouldPoll` is true is not a final no-offer outcome. `NOT_OFFERED` indicates no offer. For `429`, follow the server-provided retry time. See [Offer Polling & Rate Limits](/documentation/hybrid-experience/integrations-guide/offer-polling-rate-limits) for the complete polling contract and Account Aggregator behavior.

The [Hosted Handoff](/documentation/hybrid-experience/hosted-handoff) guide explains how to open the URL, handle mobile integrations, and continue the borrower's application. An offer does not guarantee loan approval.