> ## Documentation Index
> Fetch the complete documentation index at: https://docs.privue.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Orchestrated flow

> A company, its PAN, what is registered under that PAN, and its bank account - in one call.

One call runs five checks on one business at once and answers for each of them separately. One flat
request in, one box per check out, and each box is the envelope the individual endpoints already
return.

```bash theme={"system"}
curl -X POST https://api.privue.ai/bundle/v1/business \
  -H "Authorization: Bearer $PRIVUE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cin": "U74999MH2015PTC123456",
    "pan": "AAACE1234F",
    "name": "EXAMPLE TECHNOLOGIES PRIVATE LIMITED",
    "date_of_birth": "2015-04-01",
    "account_number": "50100123456789",
    "ifsc": "HDFC0000123"
  }'
```

Six identifiers, five checks. The PAN is read three times over.

| Box | What it answers | Read from |
| - | - | - |
| `company` | the registered profile, its directors and their other directorships | `cin` |
| `pan` | the PAN, and whether the name and date of birth claimed for it match | `pan`, `name`, `date_of_birth` |
| `gst` | the GST registration held under the PAN, in full | `pan` |
| `udyam` | the enterprise registered under the PAN | `pan` |
| `bank` | the account, and the name the bank holds it in | `account_number`, `ifsc` |

Every field is required: the flow runs the same five checks every time. They run at the same time,
so the call takes about as long as the slowest source rather than the sum of all five.

## What comes back

```json theme={"system"}
{
  "bundle": "business",
  "results": {
    "company": { "reasons": [], "details": { } },
    "pan":     { "reasons": [], "details": { } },
    "gst":     { "reasons": [], "details": { } },
    "udyam":   {
      "reasons": [{ "code": "source-unavailable", "message": "This check could not be completed." }],
      "details": null
    },
    "bank":    { "reasons": [], "details": { } }
  }
}
```

Read `reasons` on each box rather than the status code: a call the sources answered returns `200`
whatever they concluded. An empty `reasons` means that check passed. A check that answered nothing
says what stood in the way: `source-unavailable` for a source that could not be reached, or
`details-refused` for one that would not accept the details it was sent.

One check answering nothing never fails the others.

## When a request is refused

A request missing an identifier, or carrying one of the wrong shape, is refused whole with a `422`
naming the field. No source is called. The flow answers for all five checks or refuses the request
outright; it never answers for some of them.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.