Skip to main content
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 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 shows two workspaces side by side.

Steps

1

Start KYC during onboarding

When a seller finishes the signup form, create a verification with their seller ID:
2

Hold listings and payouts

While kyc_status is not approved, let the seller prepare listings but not publish them, and hold payouts.
3

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.
4

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.

When a seller defrauds you

Block their face 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.