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

# Free status enquiry

> GET /public/enquiry/{kind} runs a free Bill of Entry, Shipping Bill or challan status check. Public, no API key, strictly rate-limited per IP, demo-first with an honest live mode.

A free status check for a Bill of Entry, a Shipping Bill, or a challan. Public, no key, and strictly rate-limited per IP because a live lookup can fan out to ICEGATE.

```bash theme={"dark"}
curl "https://api.scripxhq.com/public/enquiry/be?be_number=1234567&be_date=2026-07-20&location=INNSA1"
```

## Kinds and required parameters

The `kind` path segment selects the check; each kind requires its own query parameters. An unknown kind returns `404`; a missing parameter returns `400`.

| `kind`    | Required query parameters                            |
| --------- | ---------------------------------------------------- |
| `be`      | `be_number`, `be_date`, `location`                   |
| `sb`      | `sb_number`, `sb_date`, `location`                   |
| `challan` | `challan_number`, `document_number`, `document_date` |

Each parameter is capped at 32 characters.

## Response (demo mode)

By default the endpoint answers with a clearly labelled, deterministic sample so the tool demos believably. The payload says it is a sample twice, in `source` and `note`:

```json theme={"dark"}
{
  "kind": "be",
  "query": { "be_number": "1234567", "be_date": "2026-07-20", "location": "INNSA1" },
  "status": "Assessed, duty payable",
  "stage": 2,
  "stages_total": 4,
  "timeline": [
    { "step": "BE filed, awaiting assessment", "done": true },
    { "step": "Assessed, duty payable", "done": true },
    { "step": "Duty paid, awaiting Out of Charge", "done": false },
    { "step": "Out of Charge granted", "done": false }
  ],
  "source": "demo",
  "note": "Sample response, live ICEGATE lookups are rolling out. The shape is exact; the values are illustrative.",
  "as_of": "2026-07-25T14:32:00+05:30"
}
```

## Response (live mode)

When an operator has armed live mode, the same call bridges to ICEGATE's own no-login public enquiry and returns `source: "live"` with a `result` object. A live lookup that fails returns an honest `503`; it never silently degrades to demo data.

```json theme={"dark"}
{
  "kind": "be",
  "query": { "be_number": "1234567", "be_date": "2026-07-20", "location": "INNSA1" },
  "result": { "...": "the portal's public status payload" },
  "source": "live",
  "as_of": "2026-07-25T14:32:00+05:30"
}
```

## Notes

* **Strict per-IP limit.** This surface has a tighter budget than the rate endpoints. A 429 carries a `retry_after_s` hint. See [Rate limits](/rate-limits#the-public-surface).
* **No key, no PII.** The check reads a public portal status; nothing here passes through a tenant.

## Related

* [Get the SRR](/api-reference/public/rates)
* [Rate limits](/rate-limits)

**Terms used here:** [ICEGATE](/annexure/terminology#icegate), [Bill of Entry](/annexure/terminology#bill-of-entry), [SRR](/annexure/terminology#scrip-reference-rate). Full list in the [terminology annexure](/annexure/terminology).
