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

# endstate.verify

> Records a tap and returns a session scoped to it. Takes the identified tap, not a URL - use `tryParseTapUrl` to get one from a page URL.

```ts theme={null}
verify(input: TapInput, options?: VerifyOptions): Promise<TapSession>
```

## Input

<ParamField body="chip_id" type="string" required>
  The chip that was tapped, `^[0-9A-Fa-f]{10}$`. Normalized to uppercase before
  sending.
</ParamField>

<ParamField body="e" type="string" required>
  The single-use tap credential, `^[0-9A-Fa-f]{32}$`. Each one works exactly
  once - never cache or reuse it.
</ParamField>

<ParamField body="c" type="string">
  Tap verification code, `^[0-9A-F]{16}$`. Present whenever the tag carries one.
  Forward it when you have it.
</ParamField>

A `TapInput` also carries `source`, `url` and `raw` when it came from a tap
source. Those are local metadata and are never sent to the API.

## Example

```ts theme={null}
const session = await endstate.verify({ chip_id: chipId, e, c });
```

A tap read from a redirect destination carries no `c` - the redirect forwards
`endstate_chip_id` and `endstate_e` only - so omit it there.
