Verification
Identity and age-verification flows used by Fangate.
Two systems are active:
- Veriff: creator identity verification
- Yoti: buyer age verification
They solve different problems and should not be treated as interchangeable.
Veriff
Veriff is used for creator identity verification.
GET /api/veriff/create
Create a new Veriff session for the authenticated creator.
- Auth required: Yes
- Roles: Authenticated creator
Success response example
Current controller returns the raw Veriff session payload, not the standard Fangate { success, data } wrapper.
json
{
"status": "success",
"verification": {
"id": "96972fba-3de6-4346-9029-4fdbea684bd3",
"url": "https://alchemy.veriff.com/v/...",
"vendorData": "42",
"host": "https://alchemy.veriff.com",
"status": "created",
"sessionToken": "jwt-token"
}
}Error example
json
"Can't create session"Side effects
- on success, backend stores
veriff_idon the user
POST /api/veriff/decision
Fetch the current verification decision for the authenticated creator.
- Auth required: Yes
- Roles: Authenticated creator
Success response examples
Verified:
json
[
"User is verified"
]Not verified:
json
[
"User is not verified"
]Missing session:
json
"The user hasn't verification session."Important notes
- this endpoint also does not use the standard Fangate response wrapper
- when Veriff decision code
9001is returned, backend updatesis_verified=true
Yoti
Yoti is used for buyer age verification when a product requires it.
POST /api/yoti/session/create
Create a Yoti age-verification session.
- Auth required: No
- Roles: Public buyer flow
- Content type:
application/json
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
short_link_key | string | Yes | Product short-link key used to build the return URL. |
Success response example
json
{
"success": true,
"session_id": "abc-123-def",
"link": "https://api.yoti.com/..."
}Error example
json
{
"success": false,
"message": "Failed to create verification session",
"error": null
}Important notes
- current controller does not wrap this in the standard API envelope
- Yoti session creation uses the current PHP session id plus the short-link return target
POST /api/yoti/webhook
Receive webhook notifications from Yoti.
- Auth required: No
- Roles: Yoti server-to-server callback
Success response example
json
{
"status": "ok"
}Error response example
json
{
"status": "error"
}Verification flow examples
Creator identity verification
GET /api/veriff/create- creator completes hosted Veriff flow
POST /api/veriff/decisionGET /api/userconfirmsis_verified
Buyer age verification
- buyer opens a sales link for adult content with age check enabled
- frontend calls
POST /api/yoti/session/create - buyer completes Yoti flow
- Yoti calls
POST /api/yoti/webhook - buyer returns to purchase flow