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

# Push verification

> Use the Web SDK to initiate push verification challenges.

<Info>
  Check out our end-to-end guide on [how to implement push verification using
  Authsignal](/authentication-methods/app-verification/push).
</Info>

## Start a push challenge

Start a push challenge by sending a notification to the user's mobile device.

```ts theme={null}
const response = await authsignal.push.challenge({ action: "login" });
```

To target a specific enrolled push authenticator when the user has more than one, pass its `userAuthenticatorId`. The challenge is then sent only to that authenticator and can only be approved from that device.

```ts theme={null}
const response = await authsignal.push.challenge({
  action: "login",
  userAuthenticatorId: "9b89d063-72c8-4a3b-9c2b-1e2f3a4b5c6d",
});
```

### Parameters

<ResponseField name="action" type="string" required>
  The action being performed.
</ResponseField>

<ResponseField name="userAuthenticatorId" type="string">
  The ID of a specific enrolled push authenticator to target. When omitted, the challenge is sent to all of the user's eligible push authenticators.
</ResponseField>

### Response

<ResponseField name="response" type="AuthsignalResponse<PushChallengeResponse>">
  <Expandable title="properties">
    <ResponseField name="data" type="PushChallengeResponse">
      <Expandable title="properties">
        <ResponseField name="challengeId" type="string">
          The ID of the Authsignal challenge. Use this ID to poll for the challenge result.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="errorCode" type="string">
      See the [Error handling](/sdks/client/web/error-handling) section for more details.
    </ResponseField>

    <ResponseField name="errorDescription" type="string" />
  </Expandable>
</ResponseField>

## Check push challenge verification status

```ts theme={null}
const response = await authsignal.push.verify({
  challengeId: "3a991a14-690c-492b-a5e5-02b9056a4b7d",
});
```

### Parameters

<ResponseField name="challengeId" type="string">
  The ID of the Authsignal challenge returned when starting the push challenge.
</ResponseField>

### Response

<ResponseField name="response" type="AuthsignalResponse<PushVerifyResponse>">
  <Expandable title="properties">
    <ResponseField name="data" type="PushVerifyResponse">
      <Expandable title="properties">
        <ResponseField name="isConsumed" type="boolean" required>
          True if the challenge has been either approved or denied by a user.
        </ResponseField>

        <ResponseField name="isVerified" type="boolean" required>
          True if the challenge has been approved by a user.
        </ResponseField>

        <ResponseField name="accessToken" type="string">
          A token which can be used for [server-side
          validation](/sdks/server/challenges#validate-challenge). Only present if the challenge
          succeeded.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="errorCode" type="string">
      See the [Error handling](/sdks/client/web/error-handling) section for more details.
    </ResponseField>

    <ResponseField name="errorDescription" type="string" />
  </Expandable>
</ResponseField>
