Create a session
Starts a verification and returns the `url` to send the person to. A live key sets the tier's price aside, which is kept only if the session reaches a decision.
Starts a verification and returns the url to send the person to. A live key sets the tier's price aside, which is kept only if the session reaches a decision.
apiKeyAuthorizationBearer <token>Your API key, starting with upsky_test_ or upsky_live_.
application/json- body
tier?stringage: selfie with liveness and an age estimate. identity: adds an ID, front and back, and a face match. identity_plus isn't available yet.
"identity""age""identity""identity_plus"reference?stringYour own ID for this person. Only your team sees it.
1 <= length <= 200return_url?stringWhere to send the person once they're done: a web page, or your app through its own scheme (myapp://verified) to bring them back from an in-app browser. The page goes there by itself a few seconds after they submit, or after the result when show_result is on, and also shows a button.
length <= 2000minimum_age?integer13 <= value <= 2518allow_selfie_upload?booleanLet the person send a selfie from their photos instead of taking it with the camera. Camera only by default. Live sessions always take the selfie with the camera, through the liveness check.
falseshow_result?booleanShow the person the result on the link right after they send it: approved, rejected or in review, never why. Off by default, so you tell them yourself.
falseexpires_in?integerSeconds the link works for, from an hour to seven days. A day by default.
3600 <= value <= 60480086400project_id?stringOne of your team's projects, to group sessions by. The session uses the project's Verify settings where it has its own.
uuidoptions?Anything this session should do differently from its project's Verify settings, or your team's. Leave a key out to keep the setting.
expected?What you expect the ID to say. Names match whatever their accents, case or middle names. identity tier only. The result is in checks.data_match; by default a difference sends the session to review.
metadata?Up to 20 keys of your own, returned as given.
The new session.
application/json- response
id*stringuuidobject*"verify.session""verify.session"livemode*booleantier*string"age""identity""identity_plus"status*stringpending until the person opens the link, in_progress while they take photos, processing once submitted, then approved, rejected or needs_review. A link that's never finished ends expired or canceled, and isn't charged.
"pending""in_progress""processing""approved""rejected""needs_review""expired""canceled"url*|The link to send the person to. Null once it can't be used anymore.
reference*string|nullmetadata*project_id*|uuidreturn_url*string|nullminimum_age*integerallow_selfie_upload*booleanWhether the person may send a selfie from their photos. When false, it has to be taken with the camera on the page.
show_result*booleanWhether the link shows the person the result once it's decided.
thresholds*How sure each check had to be, copied when the session was created from its project's Verify settings, or your team's if the project has none. A score at or above a pass mark passes; from its review mark up to the pass mark goes to review; below the review mark is rejected.
options*What the session runs by, copied when it was created from its project's Verify settings, or your team's, with anything you set in the request on top.
reasons*array<>Why the session ended as it did.
checks*What each check found. Empty until the session is decided.
document_type*|"mx_ine""passport""us_drivers_license""id_card"nullverified_outputs*|What was read from the ID. Identity tier and above, once decided. Only returned when you read one session, never in lists or webhooks.
expires_at*stringcreated_at*stringstarted_at*string|nullsubmitted_at*string|nulldecided_at*string|nullreviewed_at*string|nullredacted_at*|When the person's data was deleted from the session with the redact endpoint.
curl -X POST 'https://api.upsky.dev/v1/verify/sessions' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "verify.session", "livemode": true, "tier": "age", "status": "pending", "url": "string", "reference": "string", "metadata": { "property1": "string", "property2": "string" }, "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9", "return_url": "string", "minimum_age": 0, "allow_selfie_upload": true, "show_result": true, "thresholds": { "preset": "relaxed", "liveness_pass": 0, "liveness_review": 0, "face_match_pass": 0, "face_match_review": 0, "age_buffer_years": 0 }, "options": { "documents": { "allowed_types": [ "mx_ine" ], "allowed_countries": [ "string" ], "max_attempts": 0 }, "rules": { "liveness_inconclusive": "reject", "age_inconclusive": "reject", "document_unreadable": "reject", "document_expired": "reject", "document_checksum_failed": "reject", "document_type_mismatch": "reject", "document_country_not_accepted": "reject", "date_of_birth_missing": "reject", "face_match_inconclusive": "reject", "age_estimate_mismatch": "reject", "name_mismatch": "reject", "date_of_birth_mismatch": "reject" }, "retention_days": 0 }, "reasons": [ "liveness_failed" ], "checks": { "liveness": { "status": "passed", "confidence": 0, "feedback": [ "face_not_visible" ] }, "age": { "status": "passed", "minimum_age": 0, "estimated_low": 0, "estimated_high": 0, "estimated_age": 0, "age_from_document": 0 }, "document": { "status": "passed", "document_type": "mx_ine", "expired": true, "checksums_valid": true, "type_matches": true, "country_accepted": true }, "face_match": { "status": "passed", "similarity": 0 }, "data_match": { "status": "passed", "first_name": "match", "last_name": "match", "date_of_birth": "match" } }, "document_type": "mx_ine", "verified_outputs": { "first_name": "string", "last_name": "string", "date_of_birth": "string", "document_type": "mx_ine", "document_number": "string", "issuing_country": "string", "expires_on": "string" }, "expires_at": "string", "created_at": "string", "started_at": "string", "submitted_at": "string", "decided_at": "string", "reviewed_at": "string", "redacted_at": "string"}