Hosted KYC is asynchronous. A hosted method starts or continues collection. It is not a verification decision.
How it works
1
Create the user
Call
POST /v1/users with the user’s email and your external reference.2
Check verification requirements
Call
GET /v1/users/{user_id}/verifications/requirements. If
user_action_required is true and required_actions contains an action_type: "verification" item, create a
hosted verification.3
Create or retry a hosted verification
Call
POST /v1/users/{user_id}/verifications/hosted. After a retryable failure, send
the same request again. PWS determines whether to continue or replace the existing attempt.4
Start collection
Use the returned
methods.web or methods.embedded value before it expires. If the response contains
not_required, do not start another verification.5
Reconcile status
Create the user
Create the account-owned user resource first: All requests use PWS API authentication.id.
Check verification requirements
Fetch the user’s current verification state and required actions:required_actionslists the current outstanding requirements.user_action_requiredindicates whether the user or your application can act on a requirement now.stateindicates whether the user can use PWS services. Anokuser is active. Adisabledorcloseduser cannot use the services.
user_action_required is true and required_actions contains an
action_type: "verification" item. If the response contains only an
action_type: "wait" item, Payward is performing additional review. The user
does not need to complete another verification. Calling Create Hosted
Verification while the user is waiting returns not_required.
Verification requirements can be added after a user has already been verified. Do not cache this response as a
permanent eligibility decision. Fetch it again when you need the user’s current state, and when you receive a
verification.requirements_updated webhook.Create a hosted verification
Call Create hosted verification when Get verification requirements reports a user-actionable verification:web and embedded are
independently optional, but methods always contains at least one of them:
methods.web.url, or initialize Sumsub with the data in
methods.embedded.sumsub.
If no verification is required, the response contains not_required instead:
not_required. On a retry,
not_required can mean that PWS successfully reconciled the previous submission
and the user no longer has an actionable verification requirement. Do not send
the user back to the hosted flow. Fetch Get verification
requirements to refresh the state shown in your
application.
Handle errors
If the operation returns500, 503, or 504, PWS could not complete or
reconcile the request. Display a temporary message such as “Verification is
temporarily unavailable. Try again shortly.” Retry the same request after a
backoff.
A 403 response means your account is not allowed or configured to create
hosted verifications. Stop automatic retries and contact Payward support. Do
not treat an error response as a completed verification.
Reconcile status
When the hosted response containsmethods, use its verification_id to fetch
that verification. A not_required response does not contain a verification ID
because there is no hosted verification to reconcile:
types array describing the
document roles it covers. Its values are proof_of_identity,
proof_of_address, proof_of_liveness, validated_tax_id, and other.
Register webhooks to avoid continuous polling. Subscribe to
verification.requirements_updated,
then call Get verification requirements when
it arrives. Subscribe to
verification.updated, then call Get
Verification with the payload’s user_id and
verification_id.
The webhook payloads contain only the IDs required for those follow-up calls.
Treat them as notifications because delivery can be delayed, duplicated, or
reordered. The GET response is the current state.