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

# Contact Verification

> Verify that a property's email and phone number are valid and reachable using OTP.

Contact Verification lets you confirm that the email address and phone number you have on file for a property are valid and reachable. PCI Booking handles the entire verification flow: sending the email, hosting the verification page, and delivering the OTP via SMS or voice call.

## Use Cases

* **Validating newly submitted details.** When a property submits contact details through a self-service portal, trigger a verification to confirm they are correct before storing them.
* **Periodic re-verification.** Contact details can become outdated without notice. Periodically re-verify stored details to detect stale information and prompt the property to update their records.

## How It Works

1. **You create a verification request.** Call the [Create a Verification](/api-reference/additional/create-verification) endpoint with the property's email, phone number, and name. You can optionally set an expiration time, language, callback URL, and metadata.

2. **PCI Booking sends an email.** The property receives an email with a greeting and a secure link. The link expires after the time you specified (default: 10 minutes).

3. **The property verifies their phone number.** When they click the link, PCI Booking shows a hosted page where they enter their phone number and receive a 6-digit OTP via SMS or voice call. The OTP expires in 10 minutes.

4. **Verification completes.** After entering the correct code, the session status changes to `Verified`. If the code is wrong or the link expires, the status becomes `Failed` or `Expired`.

## Checking Results

You have two options for getting the verification outcome:

### Polling

Call [Get Verification Status](/api-reference/additional/get-verification-status) to check whether the session is still `Pending`, or has reached a terminal state (`Verified`, `Failed`, `Expired`). Once terminal, call [Get Verification Results](/api-reference/additional/get-verification-results) for the full outcome.

### Callback

If you provided a `callbackUrl` when creating the verification, PCI Booking sends a POST request to that URL when the session reaches a terminal state. The payload contains the session ID, final status, completion time, and your metadata. See [Receive Result Notification](/api-reference/additional/receive-result-notification) for the payload format.

<Info>
  Callback delivery is best-effort. If your endpoint is unreachable, the failure is logged but does not affect the verification outcome. Use polling as a fallback.
</Info>

## Verification Statuses

| Status     | Description                                                                 |
| ---------- | --------------------------------------------------------------------------- |
| `Pending`  | The verification was created but the property has not yet clicked the link. |
| `OtpSent`  | The property clicked the link and an OTP was sent to their phone.           |
| `Verified` | The property successfully entered the correct OTP.                          |
| `Failed`   | The verification failed (wrong code, too many attempts, etc.).              |
| `Expired`  | The verification link expired before the property completed the process.    |

## Security

* Each OTP is a single-use 6-digit code, hashed and salted before storage. PCI Booking does not retain the plain-text code.
* Two-factor verification (email link + phone OTP) ensures the property controls both channels.
* Verification links are time-limited and single-use.

## Next Steps

<CardGroup cols={2}>
  <Card title="Create a Verification" icon="code" href="/api-reference/additional/create-verification">
    Initiate a new contact verification request.
  </Card>

  <Card title="Get Verification Status" icon="code" href="/api-reference/additional/get-verification-status">
    Check if a verification is still pending or complete.
  </Card>

  <Card title="Get Verification Results" icon="code" href="/api-reference/additional/get-verification-results">
    Retrieve the full outcome of a completed verification.
  </Card>

  <Card title="Receive Result Notification" icon="code" href="/api-reference/additional/receive-result-notification">
    Callback payload format for automated processing.
  </Card>
</CardGroup>
