# `Stripe.Services.Identity.VerificationSessionService`
[🔗](https://github.com/jeffhuen/tiger_stripe/blob/main/lib/stripe/services/identity/verification_session_service.ex#L2)

GelatoVerificationSession

A VerificationSession guides you through the process of collecting and verifying the identities
of your users. It contains details about the type of verification, such as what [verification
check](https://docs.stripe.com/docs/identity/verification-checks) to perform. Only create one VerificationSession for
each verification in your system.

A VerificationSession transitions through [multiple
statuses](https://docs.stripe.com/docs/identity/how-sessions-work) throughout its lifetime as it progresses through
the verification flow. The VerificationSession contains the user's verified data after
verification checks are complete.

Related guide: [The Verification Sessions API](https://docs.stripe.com/identity/verification-sessions)

# `cancel`

```elixir
@spec cancel(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Cancel a VerificationSession

A VerificationSession object can be canceled when it is in `requires_input` [status](https://docs.stripe.com/docs/identity/how-sessions-work).

Once canceled, future submission attempts are disabled. This cannot be undone. [Learn more](https://docs.stripe.com/docs/identity/verification-sessions#cancel).

# `create`

```elixir
@spec create(Stripe.Client.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Create a VerificationSession

Creates a VerificationSession object.

After the VerificationSession is created, display a verification modal using the session `client_secret` or send your users to the session’s `url`.

If your API key is in test mode, verification checks won’t actually process, though everything else will occur as if in live mode.

Related guide: [Verify your users’ identity documents](https://docs.stripe.com/docs/identity/verify-identity-documents)

# `list`

```elixir
@spec list(Stripe.Client.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

List VerificationSessions

Returns a list of VerificationSessions

# `redact`

```elixir
@spec redact(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Redact a VerificationSession

Redact a VerificationSession to remove all collected information from Stripe. This will redact
the VerificationSession and all objects related to it, including VerificationReports, Events,
request logs, etc.

A VerificationSession object can be redacted when it is in `requires_input` or `verified`
[status](https://docs.stripe.com/docs/identity/how-sessions-work). Redacting a VerificationSession in `requires_action`
state will automatically cancel it.

The redaction process may take up to four days. When the redaction process is in progress, the
VerificationSession’s `redaction.status` field will be set to `processing`; when the process is
finished, it will change to `redacted` and an `identity.verification_session.redacted` event
will be emitted.

Redaction is irreversible. Redacted objects are still accessible in the Stripe API, but all the
fields that contain personal data will be replaced by the string `[redacted]` or a similar
placeholder. The `metadata` field will also be erased. Redacted objects cannot be updated or
used for any purpose.

[Learn more](https://docs.stripe.com/docs/identity/verification-sessions#redact).

# `retrieve`

```elixir
@spec retrieve(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Retrieve a VerificationSession

Retrieves the details of a VerificationSession that was previously created.

When the session status is `requires_input`, you can use this method to retrieve a valid
`client_secret` or `url` to allow re-submission.

# `update`

```elixir
@spec update(Stripe.Client.t(), String.t(), map(), keyword()) ::
  {:ok, term()} | {:error, Stripe.Error.t()}
```

Update a VerificationSession

Updates a VerificationSession object.

When the session status is `requires_input`, you can use this method to update the
verification check and options.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
