curl --request POST \
--url https://platform.spritz.finance/v1/users/me/verification-sessions/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.spritz.finance/v1/users/me/verification-sessions/"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.spritz.finance/v1/users/me/verification-sessions/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://platform.spritz.finance/v1/users/me/verification-sessions/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://platform.spritz.finance/v1/users/me/verification-sessions/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.spritz.finance/v1/users/me/verification-sessions/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.spritz.finance/v1/users/me/verification-sessions/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"sessionId": "inq_2Q3x7k9m1n",
"provider": "persona",
"sessionToken": "<string>",
"verificationUrl": "https://withpersona.com/verify?inquiry-id=inq_2Q3x7k9m1n",
"verificationUrlExpiresAt": "2023-11-07T05:31:56Z"
}{
"title": "Unauthorized",
"status": 401,
"type": "urn:problem-type:auth:unauthorized",
"detail": "Bearer token required",
"instance": "<string>",
"realm": "API",
"scope": "read:users"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}Create, resume, or retry an identity verification session
Creates or resumes the authenticated user’s Persona identity verification session without requesting an implicit enhanced upgrade, or starts a new inquiry when a failed verification is retryable. Check GET /v1/users/me: verification.status=retry and identity_verification requirements with retryable=true indicate eligibility. Overlapping REST session requests for the same user return 409 Conflict while a request is in progress. Retry the same POST after the first request completes. Temporary provider unavailability returns 503 VERIFICATION_TEMPORARILY_UNAVAILABLE with retryAfter (seconds). URLs and tokens may expire and are retrieved just in time. Returns 409 VERIFICATION_NOT_RETRYABLE for a permanent failure, VERIFICATION_UNDER_REVIEW while review is pending, VERIFICATION_ALREADY_VERIFIED when verified with no pending verification, or VERIFICATION_SESSION_UNAVAILABLE when unavailable or an interrupted retry requires support reconciliation. An interrupted retry with a saved Persona idempotency key or inquiry ID resumes that inquiry and completes pending event delivery on a subsequent POST; creation that is still ambiguous after 23 hours returns VERIFICATION_SESSION_UNAVAILABLE instead of starting another inquiry. An existing pending step-up remains resumable; this call does not initiate a new step-up for an already verified user.
curl --request POST \
--url https://platform.spritz.finance/v1/users/me/verification-sessions/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://platform.spritz.finance/v1/users/me/verification-sessions/"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://platform.spritz.finance/v1/users/me/verification-sessions/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://platform.spritz.finance/v1/users/me/verification-sessions/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://platform.spritz.finance/v1/users/me/verification-sessions/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.spritz.finance/v1/users/me/verification-sessions/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.spritz.finance/v1/users/me/verification-sessions/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"sessionId": "inq_2Q3x7k9m1n",
"provider": "persona",
"sessionToken": "<string>",
"verificationUrl": "https://withpersona.com/verify?inquiry-id=inq_2Q3x7k9m1n",
"verificationUrlExpiresAt": "2023-11-07T05:31:56Z"
}{
"title": "Unauthorized",
"status": 401,
"type": "urn:problem-type:auth:unauthorized",
"detail": "Bearer token required",
"instance": "<string>",
"realm": "API",
"scope": "read:users"
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}{
"title": "Unauthorized",
"status": 400,
"type": "urn:problem-type:auth:unauthorized",
"detail": "<string>",
"instance": "/errors/1234567890",
"code": "transaction_limit",
"field": "amountUsd",
"retryable": true,
"retryAfter": 5,
"suggestedAction": "auto_ramp",
"clearsAt": "2023-11-07T05:31:56Z",
"availableAt": "2023-11-07T05:31:56Z",
"permanent": true
}Authorizations
User bearer credential: either a Cognito JWT or an ak_ user API key. Backend integrators using HMAC must include the user API key alongside the three HMAC headers on user-scoped endpoints.
Response
Interactive enhanced verification session details retrieved just in time for the authenticated user.
Interactive enhanced verification session details retrieved just in time for the authenticated user.
Provider-issued identifier for the current verification session.
"inq_2Q3x7k9m1n"
persona, plaid Provider-issued token for an embedded flow: a Persona session token when provider is persona, or a Plaid Link token when provider is plaid. Null when the provider supplies only a hosted URL or no usable flow.
Provider-hosted URL to start or continue verification. It is the hosted fallback for either provider and must not be constructed by the client. Null when only an embedded token is available or no usable flow was returned.
"https://withpersona.com/verify?inquiry-id=inq_2Q3x7k9m1n"
Expiration time for verificationUrl when the provider returns an expiring link.