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

# Verify marketplace sellers

> Verify the identity of sellers before they can list or get paid.

A marketplace wants every seller to be a real, identified person, and each person to hold one seller account. This recipe runs KYC when a seller onboards and holds listings and payouts until they pass.

## The workspace

A **KYC** workspace with **Allow duplicate accounts** turned **off**, so [duplicate detection](/core-technology/duplicate-detection) reports a person who already has a seller account under another ID. If buyers also need an age check, give them their own workspace; the [Laravel SDK](/integration/server-sdks/laravel#several-workspaces) shows two workspaces side by side.

## Steps

<Steps>
  <Step title="Start KYC during onboarding">
    When a seller finishes the signup form, create a verification with their seller ID:

    ```php theme={null}
    $verification = ProofAge::verifications()->create([
        'external_id' => (string) $seller->id,
        'callback_url' => route('seller.onboarding.done'),
    ]);

    $seller->update(['kyc_verification_id' => $verification['id'], 'kyc_status' => 'pending']);

    return redirect()->away($verification['url']);
    ```
  </Step>

  <Step title="Hold listings and payouts">
    While `kyc_status` is not `approved`, let the seller prepare listings but not publish them, and hold payouts.
  </Step>

  <Step title="Act on the webhook">
    * `approved`: set the seller as verified. If the payload has `duplicate_detected`, the same face already verified under the seller ID in `duplicate_of.external_id`: decide by your policy, for example send both accounts to your own review before publishing.
    * `declined`: keep the seller blocked; `reason` says why.
    * `review`: keep holding; another webhook follows.
  </Step>

  <Step title="Use the name, if you need it">
    `GET /v1/verifications/{id}/document` returns the name and date of birth read from the document, for example to match the payout account holder, along with the document type and issuing country. On an identity (KYC) workspace it also returns the nationality, the document number and its dates. See [Reading results](/integration/retrieving-results).
  </Step>
</Steps>

## When a seller defrauds you

[Block their face](/core-technology/face-blocklist) with `reason_code` `scam_or_abuse`. Their verifications, under any seller ID and in every workspace of your account, are then declined.

## Edge cases

* **The seller never finishes.** The verification is `abandoned` or `expired` after seven days; remind them and create a new one.
* **Name mismatch with the payout account.** Compare with the document fields on your side; ProofAge does not see your payout data.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.