Approve a hosted verification whose run has finished, with your reason if you give one.
A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended.
On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run’s contracts. A run already holding a signed contract of each completes as it is approved.
Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification’s history on the dashboard keeps every review. A reset clears the review along with the run it was given on.
POST
/
verifications
/
{verification_id}
/
approve
Approve a verification
curl --request POST \
--url https://api.verify.privue.ai/verifications/{verification_id}/approve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"reason": "GSTIN active and PAN matches the director"
}
'
import requests
url = "https://api.verify.privue.ai/verifications/{verification_id}/approve"
payload = { "reason": "GSTIN active and PAN matches the director" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'GSTIN active and PAN matches the director'})
};
fetch('https://api.verify.privue.ai/verifications/{verification_id}/approve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
verification_id
string<uuid>
required
Body
application/json
What approving or rejecting a verification takes.
reason
string | null
Why, in your own words, for whoever reads the record after you. It is deleted with everything the user provided once the verification expires or you purge it, and the review itself stays.
Required string length: 1 - 500
Response
The record, now approved.
The whole record of one verification; safe to poll.
id
string<uuid>
required
The verification's id.
mode
enum<string>
required
How verifications on this workflow are conducted. hosted: the person being verified walks the journey on our screens and submits it. staged: you create a verification, upload each document against the step it answers, and then ask for the checks to run. instant: you send the whole submission in one request, which runs the checks and answers with the finished record.
A workflow is one of the three, and every endpoint belonging to another is refused on it.
Available options:
hosted,
staged,
instant
status
enum<string>
required
open while the run is live and the user may act, which a step held up by a technical problem does not end, and again once you reopen a finished run for the user to correct; submitted once the user has finished, which they can only do with every step settled, so the result is final from that moment; completed once the checks that follow a submission have run, such as notifying you by callback, and the data is safe to read; pending-approval instead of completed on a hosted workflow that does not approve its runs automatically, until you approve the run or reject it, which makes it rejected; pending-signature instead of completed, once approved, on a version that offers contracts, until a contract of each one in offered_contracts is signed, which completes it; failed if the run reached an unrecoverable state, in which case reset it or create a new one; cancelled if you ended the run; gated if one of your gate checks ended the run where it stood, which your system does by answering terminate or redirect, as does a workflow falling back to either when your system gives no answer. Poll until the status is one of pending-approval, pending-signature, completed, rejected, cancelled, gated or failed.
expired supersedes all of them once the retention window runs out: the run is of no further use and is kept for your audit alone. It says nothing about how the run had ended, so read completed_at, signed_at, review, cancelled_at, gated_at or failed_at for that rather than expecting the status to hold it.
Available options:
open,
submitted,
pending-approval,
pending-signature,
completed,
rejected,
cancelled,
gated,
expired,
failed
workflow_key
string
required
The workflow this verification runs.
Minimum string length: 1
version
integer
required
Which version of the workflow this verification runs. It is the workflow's latest version when the verification was created, and it holds for the verification's whole life: a change published to the workflow afterwards never changes what this verification asks for, which steps it reports or the names its outputs arrive under. Resetting the verification moves it onto the latest version at the time.
Required range: x >= 1
mobile
string | null
required
The user's mobile number, as you provided it. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.
email
string | null
required
The user's email address, as you provided it and lowercased. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.
reference_user_id
string
required
Your identifier for this verification, echoed back.
inviter
string | null
required
The person any invitation email into this verification names as inviting the user: the inviter you created it with, or your account's default inviter where you gave none. It is kept whether or not an invitation is emailed, so one sent after a reset onto a version that sends them names the same person, and it stays after the verification expires, being your colleague's name and not the user's data. Null where neither names anyone, and on a verification you supplied yourself.
context
Context · object
required
The facts you supplied when you created it, unchanged. Empty once the verification has expired.
return_url
string | null
required
Where the user is sent after submitting, where one was given.
journey_url
string | null
required
Where to send your user, on a hosted verification: the address of this verification's own journey. It carries no credential, so it is safe to send over WhatsApp, SMS, or email, and the user proves who they are by signing in with a one-time code sent to the contact the workflow's signs_in_with names, as you created the verification with it. Your own people open the same address to answer the steps the workflow gives them, signed in as themselves. Where the verification's version has sends_invitations true we send it to every contact you gave, and invitation says how each fared: wherever it reads not-sent, send this link yourself. On any other, send it yourself. To open the journey from inside your own app with the user already signed in, create a handoff instead.
Null on a verification you supplied yourself, which opens no journey.
created_at
string<date-time>
required
When the verification was created.
run_requested_at
string<date-time> | null
required
When you asked for the checks to run, on a staged verification. From that moment the submission is frozen: uploads, withdrawals and a run request with different values are refused until you reset.
On an instant verification it is when the request carrying the whole submission arrived. Null on a hosted one, and null on a staged one until you ask.
submitted_at
string<date-time> | null
required
When the verification was submitted, if it has been: by the user on a hosted workflow, by the run of the checks on one you supplied yourself. Reopening the verification clears it until the user submits again.
completed_at
string<date-time> | null
required
When the work that follows the submission was done, if it has been, whether the run then completed or waited on your review. Approving or rejecting the run leaves it as it is; reopening it clears it until the user's next submission has been through the same.
signed_at
string<date-time> | null
required
When the last of the contracts the verification waited on was signed, which completed it. Null until then, on a version that offers no contracts, and once you reject or reset it.
offered_contracts
string[] | null
required
The contract workflows the verification is signed on once you approve it, by key: each one its version offers whose condition the run meets. Send it a contract of each from pending-signature; a contract workflow not named here is refused. Until the run is approved it names the ones its answers so far meet.
Empty on a version that offers no contracts. A run approved with this empty on a version that offers some waits in pending-signature with nothing to send, until you reopen, reset or reject it. Null once the verification expires.
review
ApprovedReviewRecord · object
required
An approval, which completed the run or, on a version that offers contracts, left it pending-signature.
ApprovedReviewRecord
RejectedReviewRecord
ReopenedReviewRecord
Show child attributes
reopen
ReopenRecord · object | null
required
Your latest reopen of the run, and every step to look at again since: each step it sent back and every other step that differs from then, so you know what changed before you give your verdict. It stands from the reopen until you approve, reject, reset or cancel the run, through the user submitting it again, which clears review. Null on every other run, and once the verification expires.
Show child attributes
cancelled_at
string<date-time> | null
required
When the verification was cancelled, if it was.
gated_at
string<date-time> | null
required
When one of your gate checks ended the run, if one did.
gated_by_step
string | null
required
The gate check that ended the run, if one did. A workflow may declare more than one, and this says which.
It is set and cleared with gated_at: it stays set once the verification expires or you purge it, so the record still says how the run had ended, and a reset clears both.
failed_at
string<date-time> | null
required
When the verification was marked failed, if it was.
expired_at
string<date-time> | null
required
When the verification expired, if it has. From that moment it is kept for your audit and nothing else: it holds what each step concluded and nothing the user gave, so no answers, no values read off their documents, and no files. The step states you read are the ones frozen at that moment. Read the other timestamps to see how it had ended before it expired.
expired_by
enum<string> | null
required
What expired the verification. retention when its workflow's retention window ran out; client when you purged it. Null until it expires.
Available options:
retention,
client
last_activity_at
string<date-time>
required
When the verification was last acted on: by the user on a hosted workflow, by you or by the run of the checks on one you supplied yourself, by you cancelling, resetting or reopening it, or by one of its contracts being sent, withdrawn or reaching its end. Approving or rejecting it, reminding a contract's signers and reading anything leave it as it was. A verification that is created and never touched reads the moment it was created. expires_after_days is counted from here.
expires_after_days
integer
required
How many days this verification may go without activity before it expires and everything the user provided is deleted, as the version it runs states.
It is this verification's own window: a later version of its workflow can state a different one, which reaches the verifications created or reset after it, so read the window here rather than off the workflow. On an expired verification it is the window it was held to.
Required range: 1 <= x <= 36135
expires_at
string<date-time> | null
required
When the verification expires if nothing more happens to it: last_activity_at plus expires_after_days. Any activity moves it later. Null once it has expired.
invitation
InvitationRecord · object | null
required
How the journey link went out to the user over each contact you gave, on a hosted verification whose version sends invitations. It is sent once the verification is created, again when it is reset, and whenever you ask for it to be sent again; this holds the latest, and a reset clears it until the new one has gone out. One created with invite false is sent none until you ask for it.
Null until the first has been sent, on a verification whose version sends no invitations, on one you supplied yourself, and where it could not be sent at all, in which case ask for it again or send journey_url yourself.
Show child attributes
reminder
InvitationRecord · object | null
required
How the latest reminder to finish their journey went out to the user over each contact you gave, once you have asked for one. Null until the first has been sent, and again once the verification is reset.
Show child attributes
acknowledgement
AcknowledgementRecord · object | null
required
The receipt the user was sent telling them their submission arrived, on a workflow that acknowledges submissions by email. Null wherever nothing has been sent: a workflow that acknowledges nothing, a verification carrying no address to send to, a submission still being finalised, and a send that could not be made.
It names the submission it answers. A reset undoes a submission without unsending its receipt, so read submitted_at here against the record's own to tell a receipt for the submission this record stands in from one for a submission it no longer does.
Show child attributes
callback
CallbackRecord · object | null
required
How the callback for this verification's run ended: verification.submitted once it was submitted, or verification.gated once one of your gate checks ended it. Null until the callback settles, and on every verification of a workflow with no callback endpoint registered. A verification completes, or stays gated, whether or not its callback was delivered, so read this to tell a result you were told about from one you were not. Reopening the verification clears it, and the user's next submission is called back afresh.
Show child attributes
completion_callback
CallbackRecord · object | null
required
How the verification.completed callback ended, which the last signature completing the run owes you. Null until it settles, on a run no signature completed, and on every verification of a workflow with no callback endpoint registered.
Show child attributes
credits_consumed
integer
required
How many credits this verification has used. A run uses one credit when it first reaches pending-approval, pending-signature, completed, cancelled or expired, whatever the workflow asks for and however many of its checks ran, and approving, rejecting or reopening it uses nothing more, nor does the user submitting a reopened run again. Each contract sent on it uses a contract credit instead, which the workflow's contract_credits counts. A run that ends as failed or gated uses none, and one still open or submitted has used nothing yet.
Resetting a verification runs the subject through again, which is a run of its own and uses a credit of its own, so a record reset twice and completed each time reads 3.
resets
integer
required
How many times this verification has been reset. A reset clears everything the record collected and runs the subject through the checks again, so a verification reading 2 is on its third run and holds what that one has collected.
Each of these opened a run charged a credit of its own where it ended, which is what credits_consumed counts. A reset that cleared a run no credit had paid for also drew one of the workflow's resets: see resets on the workflow.
progress
ProgressRecord · object
required
Every step of the journey counted by where it stands, the ones left out included.
Show child attributes
steps
StepRecord · object[]
required
The steps this journey has not ruled out, in journey order. A workflow presents the steps that apply to whoever is being verified, so a journey that took one branch reports that branch and not the others; progress.not_applicable says how many are missing from here, and reading the verification with include_not_applicable shows them.
A step is only missing once something has ruled it out. One whose place in the journey turns on a value an earlier step has yet to publish is here, reading undetermined, so a verification you have just created reports every step its workflow declares and they resolve into the other states as it goes on.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Privue","description":"Documentation for Privue's verification products.","colors":{"primary":"#3027A0","light":"#8B8DF0","dark":"#231C7C"},"logo":"https://privue.ai/privue-logo.png","favicon":"https://mintcdn.com/privue/XnmwAq62FbFhXH41/favicon.png?fit=max\u0026auto=format\u0026n=XnmwAq62FbFhXH41\u0026q=85\u0026s=d1ef1ca1e8cc3cfd6f2a787e1d08df4e","api":{"examples":{"languages":["curl","python","javascript"]}},"appearance":{"default":"light"},"background":{"color":{"light":"#FCFCFC","dark":"#121212"}},"navbar":{"primary":{"type":"button","label":"Contact us","href":"https://privue.ai/contact"}},"footer":{"socials":{"website":"https://privue.ai"}},"fonts":{"family":"Open Sans"},"icons":{"library":"lucide"},"styling":{"eyebrows":"section","codeblocks":"system","latex":false},"contextual":{"options":["copy"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"privue","hasAudioNarration":false,"actualSubdomain":"privue","customDomains":["docs.privue.ai"],"gitSource":{"type":"github","owner":"privue-core","repo":"foundation","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af6e83507e6a796f0fd5042","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API reference","count":60},{"language":"default","tag":"Verify with Privue","count":50},{"language":"default","tag":"API Suite","count":35},{"language":"default","tag":"Guides","count":23},{"language":"default","tag":"Checks","count":15},{"language":"default","tag":"Verifications","count":9},{"language":"default","tag":"Contracts","count":8},{"language":"default","tag":"DigiLocker","count":8},{"language":"default","tag":"Get started","count":6},{"language":"default","tag":"Run a verification","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--privue-100: #eeeeff;--privue-200: #d0cdf3;--privue-300: #b4b6f8;--privue-400: #8b8df0;--privue-500: #6a6ce4;--privue-600: #504fd0;--privue-700: #3027a0;--privue-800: #231c7c;--privue-900: #17135a;--pv-background: #fcfcfc;--pv-background-lighter: #f5f5f5;--pv-card: #ffffff;--pv-foreground: #171717;--pv-foreground-secondary: #525252;--pv-foreground-lighter: #707070;--pv-border: oklch(92.2% 0 0);--pv-accent: var(--privue-700);--pv-accent-hover: var(--privue-800);--pv-accent-wash: rgb(48 39 160 / 0.05);--pv-accent-tint-border: var(--privue-200);--pv-accent-solid: var(--privue-700);--pv-accent-solid-hover: var(--privue-600);--pv-radius-lg: 10px;--pv-radius-md: 8px;--pv-radius-sm: 4px;--pv-shadow-floating: 0 16px 32px -12px rgb(15 23 42 / 0.1);--pv-red-bg: #fef2f2;--pv-red-border: #fecaca;--pv-red-fg: #b91c1c;--pv-amber-bg: #fffbeb;--pv-amber-border: #fde68a;--pv-amber-fg: #b45309;--pv-green-bg: #f0fdf4;--pv-green-border: #bbf7d0;--pv-green-fg: #15803d}.dark{--pv-background: #121212;--pv-background-lighter: #171717;--pv-card: #171717;--pv-foreground: #fafafa;--pv-foreground-secondary: #a3a3a3;--pv-foreground-lighter: #8a8a8a;--pv-border: oklch(100% 0 0 / 0.1);--pv-accent: var(--privue-400);--pv-accent-hover: var(--privue-300);--pv-accent-wash: rgb(139 141 240 / 0.1);--pv-accent-tint-border: rgb(139 141 240 / 0.25);--pv-accent-solid: var(--privue-600);--pv-accent-solid-hover: var(--privue-500);--pv-red-bg: rgb(153 27 27 / 0.15);--pv-red-border: rgb(248 113 113 / 0.3);--pv-red-fg: #fca5a5;--pv-amber-bg: rgb(146 64 14 / 0.15);--pv-amber-border: rgb(251 191 36 / 0.3);--pv-amber-fg: #fcd34d;--pv-green-bg: rgb(22 101 52 / 0.15);--pv-green-border: rgb(74 222 128 / 0.3);--pv-green-fg: #86efac}#page-title{font-weight:600!important;letter-spacing:-0.025em!important;color:var(--pv-foreground)!important}#content-area h2{font-weight:600!important;letter-spacing:-0.025em!important;color:var(--pv-foreground)!important}#content-area h3,#content-area h4,#content-area h5,#content-area h6{font-weight:600!important;letter-spacing:-0.0125em!important;color:var(--pv-foreground)!important}#content-area strong,#content-area b,#content-area th{font-weight:600!important}.mdx-content p,.mdx-content li{color:var(--pv-foreground-secondary)}.hyphens-auto,p.whitespace-pre-line,p.whitespace-pre-line *,[class*=\"overflow-wrap-anywhere\"],[class*=\"overflow-wrap-anywhere\"] *,#header .prose>*{hyphens:none!important}p.whitespace-pre-line,p.whitespace-pre-line *,[class*=\"overflow-wrap-anywhere\"],[class*=\"overflow-wrap-anywhere\"] *,#header .prose>*{overflow-wrap:break-word!important;word-break:normal!important}#content-area .eyebrow{font-size:11px!important;font-weight:600!important;letter-spacing:0.22em!important;text-transform:uppercase!important;color:var(--pv-accent)!important}#content-area table{font-variant-numeric:tabular-nums}.card,.callout,.code-block,.code-block .code-block-background,#content-area details,#content-area table,#content-area img{border-radius:var(--pv-radius-lg)!important}.card{background-color:var(--pv-card)!important;border-color:var(--pv-border)!important;box-shadow:none!important;transition:border-color 0.2s ease, box-shadow 0.2s ease}.card:hover{box-shadow:0 1px 2px 0 rgb(15 23 42 / 0.05)!important}.code-block{border-color:var(--pv-border)!important;box-shadow:none!important}.code-block .code-block-background,.code-group .code-block-background,.dark .code-block .code-block-background,.dark .code-group .code-block-background{background-color:var(--pv-background-lighter)!important}.code-block-fade-overlay{background-image:linear-gradient(\n to right,\n transparent 0,\n color-mix(in srgb, var(--pv-background-lighter) 50%, transparent) 25px,\n var(--pv-background-lighter) 60px\n )!important}#panel,[role=\"dialog\"],[role=\"menu\"],[role=\"listbox\"],#localization-select-content,#multi-view-dropdown{border-radius:var(--pv-radius-lg)!important;box-shadow:var(--pv-shadow-floating)!important}.callout{--pv-callout-bg: var(--pv-background-lighter);--pv-callout-border: var(--pv-border);--pv-callout-icon: var(--pv-foreground-lighter);--pv-callout-text: var(--pv-foreground-secondary);background-color:var(--pv-callout-bg)!important;border-color:var(--pv-callout-border)!important}.callout svg{color:var(--pv-callout-icon)!important}.callout [data-component-part=\"callout-content\"]{color:var(--pv-callout-text)!important}.callout.bg-yellow-50{--pv-callout-bg: var(--pv-amber-bg);--pv-callout-border: var(--pv-amber-border);--pv-callout-icon: var(--pv-amber-fg);--pv-callout-text: var(--pv-amber-fg)}.callout.bg-red-50{--pv-callout-bg: var(--pv-red-bg);--pv-callout-border: var(--pv-red-border);--pv-callout-icon: var(--pv-red-fg);--pv-callout-text: var(--pv-red-fg)}.callout.bg-green-50{--pv-callout-bg: var(--pv-green-bg);--pv-callout-border: var(--pv-green-border);--pv-callout-icon: var(--pv-green-fg);--pv-callout-text: var(--pv-green-fg)}.mdx-content a.link{color:var(--pv-accent)!important;border-bottom:0!important;text-decoration-line:underline!important;text-decoration-thickness:1px!important;text-underline-offset:2px!important}.mdx-content a.link:hover{color:var(--pv-accent-hover)!important}.callout a.link{color:currentColor!important}#navbar{border-color:var(--pv-border)!important;box-shadow:none!important}#sidebar a,#table-of-contents a{border-radius:var(--pv-radius-md)!important;color:var(--pv-foreground-lighter)!important;transition:color 0.2s ease, background-color 0.2s ease}#sidebar a:hover,#table-of-contents a:hover{color:var(--pv-foreground)!important}#sidebar a[class*=\"bg-primary\"]{background-color:var(--pv-accent-wash)!important;color:var(--pv-accent)!important}#topbar-cta-button a,#topbar-cta-button button,#topbar-cta-button a>span[class*=\"bg-primary\"]{border-radius:var(--pv-radius-md)!important;font-weight:500!important;box-shadow:none!important}#topbar-cta-button a>span[class*=\"bg-primary\"]{background-color:var(--pv-accent-solid)!important;transition:background-color 0.2s ease}#topbar-cta-button a:hover>span[class*=\"bg-primary\"]{background-color:var(--pv-accent-solid-hover)!important;opacity:1!important}#pagination a{border-radius:var(--pv-radius-lg)!important;border-color:var(--pv-border)!important;box-shadow:none!important}#footer{border-color:var(--pv-border)!important}#header .prose>p:not(:first-child){font-size:1rem!important;line-height:1.5!important}#request-example,#response-example,#api-playground-input,.code-group{border-radius:var(--pv-radius-lg)!important;border-color:var(--pv-border)!important;box-shadow:none!important}.code-group,.dark .code-group{background-color:var(--pv-background-lighter)!important}.border-standard{border-color:var(--pv-border)!important}#endpoints-menu-trigger,.tryit-button{border-radius:var(--pv-radius-md)!important}.tryit-button{background-color:var(--pv-accent-solid)!important;color:#ffffff!important;font-weight:500!important}.tryit-button:hover{background-color:var(--pv-accent-solid-hover)!important;opacity:1!important}#content-area input,#content-area select,#content-area textarea,#search-input,#chat-assistant-textarea{border-radius:var(--pv-radius-md)!important}:root{--pv-icon-arrow-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 5v14'/%3E%3Cpath d='m19 12-7 7-7-7'/%3E%3C/svg%3E\");--pv-icon-arrow-left: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 19-7-7 7-7'/%3E%3Cpath d='M19 12H5'/%3E%3C/svg%3E\");--pv-icon-arrow-right: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m12 5 7 7-7 7'/%3E%3C/svg%3E\");--pv-icon-arrow-up: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E\");--pv-icon-check: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E\");--pv-icon-chevron-right: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E\");--pv-icon-chevrons-up-down: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m7 15 5 5 5-5'/%3E%3Cpath d='m7 9 5-5 5 5'/%3E%3C/svg%3E\");--pv-icon-circle-alert: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' x2='12' y1='8' y2='12'/%3E%3Cline x1='12' x2='12.01' y1='16' y2='16'/%3E%3C/svg%3E\");--pv-icon-circle-check: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='m9 12 2 2 4-4'/%3E%3C/svg%3E\");--pv-icon-copy: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='14' height='14' x='8' y='8' rx='2' ry='2'/%3E%3Cpath d='M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2'/%3E%3C/svg%3E\");--pv-icon-ellipsis-vertical: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='12' cy='5' r='1'/%3E%3Ccircle cx='12' cy='19' r='1'/%3E%3C/svg%3E\");--pv-icon-globe: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\");--pv-icon-hash: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' x2='20' y1='9' y2='9'/%3E%3Cline x1='4' x2='20' y1='15' y2='15'/%3E%3Cline x1='10' x2='8' y1='3' y2='21'/%3E%3Cline x1='16' x2='14' y1='3' y2='21'/%3E%3C/svg%3E\");--pv-icon-info: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4'/%3E%3Cpath d='M12 8h.01'/%3E%3C/svg%3E\");--pv-icon-list: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 5h.01'/%3E%3Cpath d='M3 12h.01'/%3E%3Cpath d='M3 19h.01'/%3E%3Cpath d='M8 5h13'/%3E%3Cpath d='M8 12h13'/%3E%3Cpath d='M8 19h13'/%3E%3C/svg%3E\");--pv-icon-maximize: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3H5a2 2 0 0 0-2 2v3'/%3E%3Cpath d='M21 8V5a2 2 0 0 0-2-2h-3'/%3E%3Cpath d='M3 16v3a2 2 0 0 0 2 2h3'/%3E%3Cpath d='M16 21h3a2 2 0 0 0 2-2v-3'/%3E%3C/svg%3E\");--pv-icon-monitor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='20' height='14' x='2' y='3' rx='2'/%3E%3Cline x1='8' x2='16' y1='21' y2='21'/%3E%3Cline x1='12' x2='12' y1='17' y2='21'/%3E%3C/svg%3E\");--pv-icon-moon: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401'/%3E%3C/svg%3E\");--pv-icon-rotate-ccw: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8'/%3E%3Cpath d='M3 3v5h5'/%3E%3C/svg%3E\");--pv-icon-sparkles: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z'/%3E%3Cpath d='M20 2v4'/%3E%3Cpath d='M22 4h-4'/%3E%3Ccircle cx='4' cy='20' r='2'/%3E%3C/svg%3E\");--pv-icon-x: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6 6 18'/%3E%3Cpath d='m6 6 12 12'/%3E%3C/svg%3E\");--pv-icon-paperclip: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551'/%3E%3C/svg%3E\");--pv-icon-maximize-2: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 3h6v6'/%3E%3Cpath d='m21 3-7 7'/%3E%3Cpath d='m3 21 7-7'/%3E%3Cpath d='M9 21H3v-6'/%3E%3C/svg%3E\");--pv-icon-search: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21 21-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/svg%3E\");--pv-icon-sun: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2'/%3E%3Cpath d='M12 20v2'/%3E%3Cpath d='m4.93 4.93 1.41 1.41'/%3E%3Cpath d='m17.66 17.66 1.41 1.41'/%3E%3Cpath d='M2 12h2'/%3E%3Cpath d='M20 12h2'/%3E%3Cpath d='m6.34 17.66-1.41 1.41'/%3E%3Cpath d='m19.07 4.93-1.41 1.41'/%3E%3C/svg%3E\");--pv-icon-triangle-alert: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3'/%3E%3Cpath d='M12 9v4'/%3E%3Cpath d='M12 17h.01'/%3E%3C/svg%3E\");--pv-icon-zoom-in: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' x2='16.65' y1='21' y2='16.65'/%3E%3Cline x1='11' x2='11' y1='8' y2='14'/%3E%3Cline x1='8' x2='14' y1='11' y2='11'/%3E%3C/svg%3E\");--pv-icon-zoom-out: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' x2='16.65' y1='21' y2='16.65'/%3E%3Cline x1='8' x2='14' y1='11' y2='11'/%3E%3C/svg%3E\")}[aria-label=\"Open search\"] svg>*,#theme-preference-menu-trigger svg>*,#theme-preference-menu-item-system svg.size-4>*,#theme-preference-menu-item-light svg.size-4>*,#theme-preference-menu-item-dark svg.size-4>*,[aria-label=\"Copy the contents from the code block\"] svg>*,[aria-label=\"Copy\"] svg>*,#page-context-menu-button svg>*,[aria-label=\"Navigate to header\"] svg>*,[aria-label=\"More actions\"] svg>*,#footer a svg>*,[data-component-part=\"products-selector-trigger\"] svg.size-3>*,#topbar-cta-button a svg>*,[data-component-part=\"pagination-chevron\"] svg>*,[aria-label=\"Open fullscreen\"] svg>*,[aria-label=\"Pan up\"] svg>*,[aria-label=\"Pan down\"] svg>*,[aria-label=\"Pan left\"] svg>*,[aria-label=\"Pan right\"] svg>*,[aria-label=\"Zoom in\"] svg>*,[aria-label=\"Zoom out\"] svg>*,[aria-label=\"Reset view\"] svg>*,[data-component-part=\"theme-preference-menu-item\"] svg.size-3\\.5>*,[aria-label=\"Select language\"] svg.size-3\\.5>*,.callout [data-component-part=\"callout-icon\"] svg>*,[aria-label=\"Toggle assistant panel\"] svg>*,[aria-label=\"Ask Assistant\"] svg>*,#ask-assistant-code-block-button svg>*,.chat-assistant-sheet-header svg>*,[aria-label=\"Send message\"] svg>*,[aria-label=\"Maximize assistant panel\"] svg>*,[aria-label=\"Close assistant panel\"] svg>*,[aria-label=\"Add attachment\"] svg>*,#table-of-contents button svg>*{display:none!important}[aria-label=\"Open search\"] svg,#theme-preference-menu-trigger svg,#theme-preference-menu-item-system svg.size-4,#theme-preference-menu-item-light svg.size-4,#theme-preference-menu-item-dark svg.size-4,[aria-label=\"Copy the contents from the code block\"] svg,[aria-label=\"Copy\"] svg,#page-context-menu-button svg,[aria-label=\"Navigate to header\"] svg,[aria-label=\"More actions\"] svg,#footer a svg,[data-component-part=\"products-selector-trigger\"] svg.size-3,#topbar-cta-button a svg,[data-component-part=\"pagination-chevron\"] svg,[aria-label=\"Open fullscreen\"] svg,[aria-label=\"Pan up\"] svg,[aria-label=\"Pan down\"] svg,[aria-label=\"Pan left\"] svg,[aria-label=\"Pan right\"] svg,[aria-label=\"Zoom in\"] svg,[aria-label=\"Zoom out\"] svg,[aria-label=\"Reset view\"] svg,[data-component-part=\"theme-preference-menu-item\"] svg.size-3\\.5,[aria-label=\"Select language\"] svg.size-3\\.5,.callout [data-component-part=\"callout-icon\"] svg,[aria-label=\"Toggle assistant panel\"] svg,[aria-label=\"Ask Assistant\"] svg,#ask-assistant-code-block-button svg,.chat-assistant-sheet-header svg,[aria-label=\"Send message\"] svg,[aria-label=\"Maximize assistant panel\"] svg,[aria-label=\"Close assistant panel\"] svg,[aria-label=\"Add attachment\"] svg,#table-of-contents button svg{background-color:currentColor!important;-webkit-mask-image:var(--pv-icon)!important;mask-image:var(--pv-icon)!important;-webkit-mask-repeat:no-repeat!important;mask-repeat:no-repeat!important;-webkit-mask-position:center!important;mask-position:center!important;-webkit-mask-size:contain!important;mask-size:contain!important}[aria-label=\"Open search\"]{--pv-icon: var(--pv-icon-search)}#theme-preference-menu-item-system{--pv-icon: var(--pv-icon-monitor)}#theme-preference-menu-content{display:none!important}html:not(.dark) #theme-preference-menu-trigger svg{--pv-icon: var(--pv-icon-sun)}html.dark #theme-preference-menu-trigger svg{--pv-icon: var(--pv-icon-moon)}#theme-preference-menu-item-light{--pv-icon: var(--pv-icon-sun)}#theme-preference-menu-item-dark{--pv-icon: var(--pv-icon-moon)}[aria-label=\"Copy the contents from the code block\"],[aria-label=\"Copy\"],#page-context-menu-button{--pv-icon: var(--pv-icon-copy)}[aria-label=\"Copy the contents from the code block\"] svg.text-primary{--pv-icon: var(--pv-icon-check)}[aria-label=\"Navigate to header\"]{--pv-icon: var(--pv-icon-hash)}[aria-label=\"More actions\"]{--pv-icon: var(--pv-icon-ellipsis-vertical)}#footer a{--pv-icon: var(--pv-icon-globe)}[data-component-part=\"products-selector-trigger\"],#topbar-cta-button a,[data-component-part=\"pagination-chevron\"]{--pv-icon: var(--pv-icon-chevron-right)}[aria-label=\"Open fullscreen\"]{--pv-icon: var(--pv-icon-maximize)}[aria-label=\"Pan up\"]{--pv-icon: var(--pv-icon-arrow-up)}[aria-label=\"Pan down\"]{--pv-icon: var(--pv-icon-arrow-down)}[aria-label=\"Pan left\"]{--pv-icon: var(--pv-icon-arrow-left)}[aria-label=\"Pan right\"]{--pv-icon: var(--pv-icon-arrow-right)}[aria-label=\"Zoom in\"]{--pv-icon: var(--pv-icon-zoom-in)}[aria-label=\"Zoom out\"]{--pv-icon: var(--pv-icon-zoom-out)}[aria-label=\"Reset view\"]{--pv-icon: var(--pv-icon-rotate-ccw)}[data-component-part=\"theme-preference-menu-item\"] svg.size-3\\.5{--pv-icon: var(--pv-icon-check)}[aria-label=\"Select language\"] svg.size-3\\.5{--pv-icon: var(--pv-icon-chevrons-up-down)}#table-of-contents button{--pv-icon: var(--pv-icon-list)}[aria-label=\"Toggle assistant panel\"],[aria-label=\"Ask Assistant\"],#ask-assistant-code-block-button,.chat-assistant-sheet-header{--pv-icon: var(--pv-icon-sparkles)}[aria-label=\"Send message\"]{--pv-icon: var(--pv-icon-arrow-up)}[aria-label=\"Maximize assistant panel\"]{--pv-icon: var(--pv-icon-maximize-2)}[aria-label=\"Close assistant panel\"]{--pv-icon: var(--pv-icon-x)}[aria-label=\"Add attachment\"]{--pv-icon: var(--pv-icon-paperclip)}.callout{--pv-icon: var(--pv-icon-info)}.callout.bg-yellow-50{--pv-icon: var(--pv-icon-triangle-alert)}.callout.bg-green-50{--pv-icon: var(--pv-icon-circle-check)}.callout.bg-red-50{--pv-icon: var(--pv-icon-circle-alert)}#search-bar-entry,#search-bar-entry-mobile,#assistant-entry,#assistant-entry-mobile{border:1px solid var(--pv-border)!important;border-radius:var(--pv-radius-md)!important;box-shadow:none!important}[data-component-part=\"search-modal\"],[data-component-part=\"search-input-container\"],.chat-assistant-floating-input>div>div,#chat-assistant-sheet{border-radius:var(--pv-radius-lg)!important;border-color:var(--pv-border)!important}[data-component-part=\"search-input-container\"]{border:1px solid var(--pv-border)!important}[data-component-part=\"search-list\"]{box-shadow:none!important}@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;transition-duration:0.01ms!important;scroll-behavior:auto!important}}"}],"page":{"pagePath":"api-reference/verifications/approve-a-verification","slug":"/api-reference/verifications/approve-a-verification","pageMetadata":{"title":"Approve a verification","description":"Approve a hosted verification whose run has finished, with your reason if you give one.\n\nA run waiting in `pending-approval` completes, and so does a rejected one. Its `review` reads `approved`, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as `verification.approved`, whichever of your callers gave it, and `review.callback` says how that callback ended.\n\nOn a version that offers contracts, an approved run reads `pending-signature` rather than completed, until a contract of each one in its `offered_contracts` is signed on it, which completes it: send each from the run's contracts. A run already holding a signed contract of each completes as it is approved.\n\nOnly a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with `409`, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/approve","href":"/api-reference/verifications/approve-a-verification","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Approve a hosted verification whose run has finished, with your reason if you give one.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A run waiting in \", _jsx(_components.code, {\n children: \"pending-approval\"\n }), \" completes, and so does a rejected one. Its \", _jsx(_components.code, {\n children: \"review\"\n }), \" reads \", _jsx(_components.code, {\n children: \"approved\"\n }), \", saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as \", _jsx(_components.code, {\n children: \"verification.approved\"\n }), \", whichever of your callers gave it, and \", _jsx(_components.code, {\n children: \"review.callback\"\n }), \" says how that callback ended.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"On a version that offers contracts, an approved run reads \", _jsx(_components.code, {\n children: \"pending-signature\"\n }), \" rather than completed, until a contract of each one in its \", _jsx(_components.code, {\n children: \"offered_contracts\"\n }), \" is signed on it, which completes it: send each from the run’s contracts. A run already holding a signed contract of each completes as it is approved.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with \", _jsx(_components.code, {\n children: \"409\"\n }), \", one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification’s history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Approve a verification","description":"Approve a hosted verification whose run has finished, with your reason if you give one.\n\nA run waiting in `pending-approval` completes, and so does a rejected one. Its `review` reads `approved`, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as `verification.approved`, whichever of your callers gave it, and `review.callback` says how that callback ended.\n\nOn a version that offers contracts, an approved run reads `pending-signature` rather than completed, until a contract of each one in its `offered_contracts` is signed on it, which completes it: send each from the run's contracts. A run already holding a signed contract of each completes as it is approved.\n\nOnly a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with `409`, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/approve","href":"/api-reference/verifications/approve-a-verification","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/privue/c105de40d6ba2650/theme-toggle.js"],"openApiReferenceData":{"operation":{"tags":["Verifications"],"summary":"Approve a verification","description":"Approve a hosted verification whose run has finished, with your reason if you give one.\n\nA run waiting in `pending-approval` completes, and so does a rejected one. Its `review` reads `approved`, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as `verification.approved`, whichever of your callers gave it, and `review.callback` says how that callback ended.\n\nOn a version that offers contracts, an approved run reads `pending-signature` rather than completed, until a contract of each one in its `offered_contracts` is signed on it, which completes it: send each from the run's contracts. A run already holding a signed contract of each completes as it is approved.\n\nOnly a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with `409`, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.","operationId":"approve_verifications__verification_id__approve_post","security":["f042be41-4e94-4bd6-ac82-4cc3e42998ab"],"parameters":["cace8bf6-25bb-4409-ae65-eefab83be316"],"requestBody":"79b804cc-97ed-40d5-b4ff-6da5ce14c836","responses":{"200":"4d3c278e-4a79-44f5-b052-2bc188dff645","401":"cffd8014-a2c1-4228-81c7-d16ea4a801d8","403":"e1efd179-2c4b-4617-9942-4e20b513a0a9","404":"12fe8b69-0706-4899-9a1e-f62d6406b81d","409":"808f424a-dadc-40da-94bb-136b567a6576","422":"07a9a97c-dbc6-4c17-9b4e-b5c28915a5e0","429":"3c7828d7-3f9f-424b-91b4-65389c7d8c07","500":"bbe9129f-cae1-429a-82c8-3c6d52ab2c8e","503":"6979f333-ace0-4848-891a-59075f84c5cb"},"method":"post","type":"path","servers":["769bbc79-30ef-42bd-8aa0-055f5837e0c5"],"path":"/verifications/{verification_id}/approve","baseUrlOptions":["https://api.verify.privue.ai"],"title":"Approve a verification","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"cace8bf6-25bb-4409-ae65-eefab83be316":{"name":"verification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Verification Id","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"ReviewRequest","description":"What approving or rejecting a verification takes.","example":{"reason":"GSTIN active and PAN matches the director"},"properties":{"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why, in your own words, for whoever reads the record after you. It is deleted with everything the user provided once the verification expires or you purge it, and the review itself stays.","maxLength":500,"minLength":1,"uniqueKey":"oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why, in your own words, for whoever reads the record after you. It is deleted with everything the user provided once the verification expires or you purge it, and the review itself stays.","uniqueKey":"oneOf.0.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.reason","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"ReviewRequest · object"},{"type":"null","title":"Body","uniqueKey":"oneOf.1","typeLabel":"null"}],"uniqueKey":"","typeLabel":"ReviewRequest · object | null"},"examples":{"Example":{"title":"Example","value":{"reason":"GSTIN active and PAN matches the director"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4d3c278e-4a79-44f5-b052-2bc188dff645":{"description":"The record, now approved.","content":{"application/json":{"example":{"id":"3f2504e0-4f89-41d3-9a0c-0305e82c3301","mode":"hosted","status":"completed","workflow_key":"merchant-onboarding","version":2,"mobile":"+919876543210","email":"rahul.mehta@example.com","reference_user_id":"merchant-42","inviter":"Priya Nair","context":{"channel":"field-sales","state":"MH"},"return_url":"https://yourapp.com/kyc/done","journey_url":"https://verify.privue.ai/acme/merchant-onboarding/3f2504e0-4f89-41d3-9a0c-0305e82c3301","created_at":"2026-08-10T14:02:11","last_activity_at":"2026-08-10T14:41:06","expires_after_days":30,"expires_at":"2026-09-09T14:41:06","run_requested_at":null,"submitted_at":"2026-08-10T14:41:06","completed_at":"2026-08-10T14:41:09","signed_at":null,"offered_contracts":[],"review":{"verdict":"approved","at":"2026-08-10T16:05:12","by":{"actor":"api-key","key_id":"key_3ZmQ7pW2xR8tLnVy"},"reason":"GSTIN active and the PAN matches the director","callback":{"status":"delivered","settled_at":"2026-08-10T16:05:14","reason":null}},"reopen":null,"cancelled_at":null,"gated_at":null,"gated_by_step":null,"failed_at":null,"expired_at":null,"expired_by":null,"invitation":{"requested_at":"2026-08-10T14:02:11","email":{"status":"sent","sent_at":"2026-08-10T14:02:14","message_id":"4ef9a1c2-7b3d-4e8a-9c51-2d6f0b8e3a71"},"sms":{"status":"not-sent","sent_at":null,"message_id":null}},"reminder":null,"acknowledgement":null,"callback":{"status":"delivered","settled_at":"2026-08-10T14:41:09","reason":null},"completion_callback":null,"credits_consumed":1,"resets":0,"progress":{"total":12,"passed":10,"failed":0,"awaiting":0,"enriching":0,"error":0,"declined":1,"not_supplied":0,"undetermined":0,"not_applicable":1},"steps":[{"key":"contact","title":"Before we start","label":"contact_email","type":"form","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"email":"owner@acmetraders.in"},"outputs":{"email":"owner@acmetraders.in"}},"documents":[]},{"key":"gst","title":"GST certificate","label":"tax_registration","type":"gst-certificate","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"gstin":"27AABCA1234F1Z5","legal_name":"ACME TRADERS PRIVATE LIMITED","trade_name":"Acme Traders","registration_status":"Active","registration_date":"2020-01-13","business_constitution":"Private Limited Company","taxpayer_type":"Regular","e_invoice_mandated":true,"aggregate_turnover":"Slab: Rs. 5 Cr. to 25 Cr.","authorized_signatories":["Rahul Mehta","Priya Mehta"],"nature_of_business_activities":["Wholesale Business","Warehouse / Depot"],"business_details":{"goods_details":[{"goods_description":"Filtering machinery","hsn_code":"84212190"}],"service_details":[]},"filings":[{"return_type":"GSTR1","financial_year":"2026-2027","tax_period":"May","status":"Filed","filing_date":"2026-06-04","mode_of_filing":"ONLINE"},{"return_type":"GSTR3B","financial_year":"2026-2027","tax_period":"May","status":"Filed","filing_date":"2026-06-23","mode_of_filing":"ONLINE"},{"return_type":"GSTR9","financial_year":"2024-2025","tax_period":"Annual","status":"Filed","filing_date":"2025-12-18","mode_of_filing":"ONLINE"}],"business_pan":"AABCA1234F","sole_proprietor_pan":null,"addresses":[{"address":"12 Industrial Estate, Pune, Maharashtra 411026","tag":"Principal Business Address"}],"primary_business_address":{"street":"12 Industrial Estate","city":"Pune","state":"Maharashtra","country":"India","postal_code":"411026"},"other_business_address":null,"names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"Legal Name"},{"name":"Acme Traders","tag":"Trade Name"}],"key_managerial_persons":[{"name":"Rahul Mehta","designation":"Managing Director"},{"name":"Priya Mehta","designation":"Director"}],"business_email":"accounts@acmetraders.in","business_mobile":"9820011223"}},"documents":[{"id":"bb9909b4-44e4-414a-af82-bad690d434ed","slot":"gst-certificate","kind":"gst-certificate","label":"gst_certificate","filename":"gst-certificate.pdf","content_type":"application/pdf","size_bytes":182044,"sha256":"63f90f32e899197edb4f038322e354f3c6b907602a44a58a0ae52b40a2cd9811","received_at":"2026-08-10T14:21:58"}]},{"key":"pan","title":"PAN card","label":"entity_pan","type":"pan-card","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"pan":"AABCA1234F","name":"ACME TRADERS PRIVATE LIMITED","date_of_birth_or_incorporation":"2011-06-14","card_document_id":"4fd79a54-a8a7-4e07-b902-a2e75af3e467","status":"valid","aadhaar_seeded":null,"names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"PAN Holder"}]}},"documents":[{"id":"4fd79a54-a8a7-4e07-b902-a2e75af3e467","slot":"pan-card","kind":"pan-card","label":"entity_pan","filename":"pan-card.jpg","content_type":"image/jpeg","size_bytes":92412,"sha256":"42b7e28cf9a26dcef6e275de42f7516ad36ee86c6aa45888821a81217e62a670","received_at":"2026-08-10T14:09:12"}]},{"key":"identity","title":"Identity","label":null,"type":"digilocker","required":false,"state":"passed","reasons":[],"gaps":[{"code":"digilocker-document-missing","message":"Your pan document was not shared from DigiLocker.","details":{"doc_type":"pan"}}],"collected":{"answer":{"session_id":"e0d4a1f6-7c93-4b28-9f51-3a8c62d0be47"},"outputs":{"name":"Rahul Mehta","names":[{"name":"Rahul Mehta","tag":"DigiLocker Holder"}],"email":"rahul.mehta@example.com","mobile":"9876543210","date_of_birth":"14/03/1986","gender":"Male","pan":null,"masked_aadhaar":"XXXXXXXX4172","photo_document_id":"c48b2e57-9a10-4d3f-b6e8-1f7c9a05d24b"}},"documents":[{"id":"7e5c1a90-2f83-4a12-9c47-6d0b58e2af31","slot":"digilocker-docs","kind":"aadhaar","label":"aadhaar_card","filename":"aadhaar.pdf","content_type":"application/pdf","size_bytes":148820,"sha256":"e17c4b8025d9a63f04e7b158c92da370465f8b1e07c3d924a6b508f1c73e2d05","received_at":"2026-08-10T14:14:37"},{"id":"c48b2e57-9a10-4d3f-b6e8-1f7c9a05d24b","slot":"digilocker-docs","kind":"photo","label":"holder_photo","filename":"photo.jpg","content_type":"image/jpeg","size_bytes":18734,"sha256":"b8043f7e1c592a6d0e34b871f5c9d206a47e3b9018c5d62faf7b04e39c1a5867","received_at":"2026-08-10T14:14:38"}]},{"key":"selfie","title":"Selfie","label":null,"type":"selfie","required":false,"state":"declined","reasons":[],"gaps":[],"collected":null,"documents":[]},{"key":"bank","title":"Bank account","label":"payout_account","type":"bank-account","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"source":"typed","account_number":"50100234567890","ifsc":"HDFC0001234"},"outputs":{"source":"typed","account_number":"50100234567890","ifsc":"HDFC0001234","registered_name":"ACME TRADERS PRIVATE LIMITED","names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"Bank Account Holder"}],"bank_name":null,"branch":null,"micr":null}},"documents":[]},{"key":"trade-licence","title":"Trade licence","label":null,"type":"documents","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{}},"documents":[{"id":"2a6f8d13-4c95-4e7b-8f30-5b1e6c9a7d02","slot":"licence","kind":"licence","label":"trade_licence","filename":"shop-establishment-licence.pdf","content_type":"application/pdf","size_bytes":221893,"sha256":"0a9c7f1b5e2d48a6c3f07b91d4e85a2c6f13b8074de92a5c1f6b3e08d7a24c95","received_at":"2026-08-10T14:27:03"},{"id":"8b31c4e6-7d92-4a58-b0f1-3e6d2c94a17f","slot":"lease","kind":"lease","label":"lease_agreement","filename":"lease-agreement.pdf","content_type":"application/pdf","size_bytes":654201,"sha256":"7d4e1c08b3a95f26d07e4b1a8c53f902e6b7d148a05c39f2b8e6104d7c3a95e2","received_at":"2026-08-10T14:28:44"}]},{"key":"premises","title":"Premises photos","label":null,"type":"premises-photos","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"locations":{"5c9e07b2-8f41-4d6a-9e35-2b7a1c8f60d4":{"latitude":18.629812,"longitude":73.813104,"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","place_id":"ChIJhTQr8kW_wjsR1nQm2eF0hQY"},"e6142f8a-3b57-4c90-8d21-9a4f7e0b53c6":{"latitude":18.629774,"longitude":73.813251,"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","place_id":"ChIJhTQr8kW_wjsR1nQm2eF0hQY"}}},"outputs":{"addresses":["12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India"]}},"documents":[{"id":"5c9e07b2-8f41-4d6a-9e35-2b7a1c8f60d4","slot":"storefront","kind":"storefront","label":"storefront_photo","filename":"storefront.jpg","content_type":"image/jpeg","size_bytes":1442310,"sha256":"c1f5b70e934a26d8071c4be95f3a20d7e846b1c95023f7ad6b48e01c9f735a26","received_at":"2026-08-10T14:33:19"},{"id":"e6142f8a-3b57-4c90-8d21-9a4f7e0b53c6","slot":"interior","kind":"interior","label":"interior_photo","filename":"interior.jpg","content_type":"image/jpeg","size_bytes":1180955,"sha256":"9b0d3e64a17c58f2e40b96d7c85a13f0246e9b7d1c503a8f6b2e74d09c1a5837","received_at":"2026-08-10T14:34:02"}]},{"key":"premises-proof","title":"Proof of premises","label":null,"type":"address-proof","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"verified_tags":["Principal Business Address"],"unverified_tags":[],"readings":[{"slot":"utility-bill","kind":"electricity","label":"electricity_bill","premises_address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","verified_tags":["Principal Business Address"]}]}},"documents":[{"id":"0c73de91-6a24-4b8f-95d0-7e41b25c8a63","slot":"utility-bill","kind":"electricity","label":"electricity_bill","filename":"electricity-bill.pdf","content_type":"application/pdf","size_bytes":96410,"sha256":"3e8b1d95c072a46f8b5309e7d41c6a28b90f7e35c1d84620a7f3b9e05d268c14","received_at":"2026-08-10T14:36:50"}]},{"key":"addresses","title":"Tag the addresses","label":null,"type":"address-tagging","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"addresses":[]},"outputs":{"addresses":[{"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","tag":"Principal Business Address"}],"recognised":["12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India"]}},"documents":[]},{"key":"review","title":"Review","label":"applicant_signoff","type":"review","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"declarations":[{"key":"terms-of-service","label":"tos_consent","title":"Terms of service","content":"I accept the [terms of service](https://yourapp.com/terms) and the [privacy policy](https://yourapp.com/privacy).","accepted":true},{"key":"information-true","label":"truth_declaration","title":null,"content":"Everything I have provided is true and correct to the best of my knowledge.","accepted":true},{"key":"contact-on-whatsapp","label":"whatsapp_optin","title":null,"content":"You may contact me about this application on WhatsApp.","accepted":false}]},"outputs":{}},"documents":[]}]},"schema":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"The verification's id.","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"mode":{"type":"string","enum":["hosted","staged","instant"],"title":"WorkflowMode","description":"How verifications on this workflow are conducted. `hosted`: the person being verified walks the journey on our screens and submits it. `staged`: you create a verification, upload each document against the step it answers, and then ask for the checks to run. `instant`: you send the whole submission in one request, which runs the checks and answers with the finished record.\n\nA workflow is one of the three, and every endpoint belonging to another is refused on it.","isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["open","submitted","pending-approval","pending-signature","completed","rejected","cancelled","gated","expired","failed"],"title":"VerificationStatus","description":"open while the run is live and the user may act, which a step held up by a technical problem does not end, and again once you reopen a finished run for the user to correct; submitted once the user has finished, which they can only do with every step settled, so the result is final from that moment; completed once the checks that follow a submission have run, such as notifying you by callback, and the data is safe to read; pending-approval instead of completed on a hosted workflow that does not approve its runs automatically, until you approve the run or reject it, which makes it rejected; pending-signature instead of completed, once approved, on a version that offers contracts, until a contract of each one in `offered_contracts` is signed, which completes it; failed if the run reached an unrecoverable state, in which case reset it or create a new one; cancelled if you ended the run; gated if one of your gate checks ended the run where it stood, which your system does by answering `terminate` or `redirect`, as does a workflow falling back to either when your system gives no answer. Poll until the status is one of pending-approval, pending-signature, completed, rejected, cancelled, gated or failed.\n\nexpired supersedes all of them once the retention window runs out: the run is of no further use and is kept for your audit alone. It says nothing about how the run had ended, so read completed_at, signed_at, review, cancelled_at, gated_at or failed_at for that rather than expecting the status to hold it.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"workflow_key":{"type":"string","minLength":1,"title":"Workflow Key","description":"The workflow this verification runs.","isRequired":true,"uniqueKey":"workflow_key","typeLabel":"string"},"version":{"type":"integer","minimum":1,"title":"Version","description":"Which version of the workflow this verification runs. It is the workflow's latest version when the verification was created, and it holds for the verification's whole life: a change published to the workflow afterwards never changes what this verification asks for, which steps it reports or the names its outputs arrive under. Resetting the verification moves it onto the latest version at the time.","isRequired":true,"uniqueKey":"version","typeLabel":"integer"},"mobile":{"oneOf":[{"type":"string","title":"Mobile","description":"The user's mobile number, as you provided it. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.","isRequired":true,"uniqueKey":"mobile.oneOf.0","typeLabel":"string"},{"type":"null","title":"Mobile","description":"The user's mobile number, as you provided it. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.","isRequired":true,"uniqueKey":"mobile.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"mobile","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","title":"Email","description":"The user's email address, as you provided it and lowercased. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.","isRequired":true,"uniqueKey":"email.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email","description":"The user's email address, as you provided it and lowercased. Null where you gave none, on a verification you supplied yourself, and once the verification has expired.","isRequired":true,"uniqueKey":"email.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"email","typeLabel":"string | null"},"reference_user_id":{"type":"string","title":"Reference User Id","description":"Your identifier for this verification, echoed back.","isRequired":true,"uniqueKey":"reference_user_id","typeLabel":"string"},"inviter":{"oneOf":[{"type":"string","title":"Inviter","description":"The person any invitation email into this verification names as inviting the user: the inviter you created it with, or your account's default inviter where you gave none. It is kept whether or not an invitation is emailed, so one sent after a reset onto a version that sends them names the same person, and it stays after the verification expires, being your colleague's name and not the user's data. Null where neither names anyone, and on a verification you supplied yourself.","isRequired":true,"uniqueKey":"inviter.oneOf.0","typeLabel":"string"},{"type":"null","title":"Inviter","description":"The person any invitation email into this verification names as inviting the user: the inviter you created it with, or your account's default inviter where you gave none. It is kept whether or not an invitation is emailed, so one sent after a reset onto a version that sends them names the same person, and it stays after the verification expires, being your colleague's name and not the user's data. Null where neither names anyone, and on a verification you supplied yourself.","isRequired":true,"uniqueKey":"inviter.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"inviter","typeLabel":"string | null"},"context":{"additionalProperties":true,"type":"object","title":"Context","description":"The facts you supplied when you created it, unchanged. Empty once the verification has expired.","isRequired":true,"uniqueKey":"context","typeLabel":"Context · object"},"return_url":{"oneOf":[{"type":"string","title":"Return Url","description":"Where the user is sent after submitting, where one was given.","isRequired":true,"uniqueKey":"return_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Return Url","description":"Where the user is sent after submitting, where one was given.","isRequired":true,"uniqueKey":"return_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"return_url","typeLabel":"string | null"},"journey_url":{"oneOf":[{"type":"string","title":"Journey Url","description":"Where to send your user, on a hosted verification: the address of this verification's own journey. It carries no credential, so it is safe to send over WhatsApp, SMS, or email, and the user proves who they are by signing in with a one-time code sent to the contact the workflow's `signs_in_with` names, as you created the verification with it. Your own people open the same address to answer the steps the workflow gives them, signed in as themselves. Where the verification's version has `sends_invitations` true we send it to every contact you gave, and `invitation` says how each fared: wherever it reads `not-sent`, send this link yourself. On any other, send it yourself. To open the journey from inside your own app with the user already signed in, create a handoff instead.\n\nNull on a verification you supplied yourself, which opens no journey.","isRequired":true,"uniqueKey":"journey_url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Journey Url","description":"Where to send your user, on a hosted verification: the address of this verification's own journey. It carries no credential, so it is safe to send over WhatsApp, SMS, or email, and the user proves who they are by signing in with a one-time code sent to the contact the workflow's `signs_in_with` names, as you created the verification with it. Your own people open the same address to answer the steps the workflow gives them, signed in as themselves. Where the verification's version has `sends_invitations` true we send it to every contact you gave, and `invitation` says how each fared: wherever it reads `not-sent`, send this link yourself. On any other, send it yourself. To open the journey from inside your own app with the user already signed in, create a handoff instead.\n\nNull on a verification you supplied yourself, which opens no journey.","isRequired":true,"uniqueKey":"journey_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"journey_url","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the verification was created.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"run_requested_at":{"oneOf":[{"type":"string","title":"Run Requested At","description":"When you asked for the checks to run, on a staged verification. From that moment the submission is frozen: uploads, withdrawals and a run request with different values are refused until you reset.\n\nOn an instant verification it is when the request carrying the whole submission arrived. Null on a hosted one, and null on a staged one until you ask.","format":"date-time","isRequired":true,"uniqueKey":"run_requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Run Requested At","description":"When you asked for the checks to run, on a staged verification. From that moment the submission is frozen: uploads, withdrawals and a run request with different values are refused until you reset.\n\nOn an instant verification it is when the request carrying the whole submission arrived. Null on a hosted one, and null on a staged one until you ask.","isRequired":true,"uniqueKey":"run_requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"run_requested_at","typeLabel":"string\u003cdate-time> | null"},"submitted_at":{"oneOf":[{"type":"string","title":"Submitted At","description":"When the verification was submitted, if it has been: by the user on a hosted workflow, by the run of the checks on one you supplied yourself. Reopening the verification clears it until the user submits again.","format":"date-time","isRequired":true,"uniqueKey":"submitted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Submitted At","description":"When the verification was submitted, if it has been: by the user on a hosted workflow, by the run of the checks on one you supplied yourself. Reopening the verification clears it until the user submits again.","isRequired":true,"uniqueKey":"submitted_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"submitted_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","title":"Completed At","description":"When the work that follows the submission was done, if it has been, whether the run then completed or waited on your review. Approving or rejecting the run leaves it as it is; reopening it clears it until the user's next submission has been through the same.","format":"date-time","isRequired":true,"uniqueKey":"completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Completed At","description":"When the work that follows the submission was done, if it has been, whether the run then completed or waited on your review. Approving or rejecting the run leaves it as it is; reopening it clears it until the user's next submission has been through the same.","isRequired":true,"uniqueKey":"completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completed_at","typeLabel":"string\u003cdate-time> | null"},"signed_at":{"oneOf":[{"type":"string","title":"Signed At","description":"When the last of the contracts the verification waited on was signed, which completed it. Null until then, on a version that offers no contracts, and once you reject or reset it.","format":"date-time","isRequired":true,"uniqueKey":"signed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Signed At","description":"When the last of the contracts the verification waited on was signed, which completed it. Null until then, on a version that offers no contracts, and once you reject or reset it.","isRequired":true,"uniqueKey":"signed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"signed_at","typeLabel":"string\u003cdate-time> | null"},"offered_contracts":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"offered_contracts.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Offered Contracts","description":"The contract workflows the verification is signed on once you approve it, by key: each one its version offers whose `condition` the run meets. Send it a contract of each from `pending-signature`; a contract workflow not named here is refused. Until the run is approved it names the ones its answers so far meet.\n\nEmpty on a version that offers no contracts. A run approved with this empty on a version that offers some waits in `pending-signature` with nothing to send, until you reopen, reset or reject it. Null once the verification expires.","isRequired":true,"uniqueKey":"offered_contracts.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Offered Contracts","description":"The contract workflows the verification is signed on once you approve it, by key: each one its version offers whose `condition` the run meets. Send it a contract of each from `pending-signature`; a contract workflow not named here is refused. Until the run is approved it names the ones its answers so far meet.\n\nEmpty on a version that offers no contracts. A run approved with this empty on a version that offers some waits in `pending-signature` with nothing to send, until you reopen, reset or reject it. Null once the verification expires.","isRequired":true,"uniqueKey":"offered_contracts.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"offered_contracts","typeLabel":"string[] | null"},"review":{"oneOf":[{"type":"object","title":"ApprovedReviewRecord","description":"An approval, which completed the run or, on a version that offers contracts, left it pending-signature.","required":["at","by","reason","callback","verdict"],"properties":{"at":{"type":"string","format":"date-time","title":"At","description":"When it was given.","isRequired":true,"uniqueKey":"review.oneOf.0.at","typeLabel":"string\u003cdate-time>"},"by":{"oneOf":[{"type":"object","title":"KeyActor","description":"An API key acting for the client, named by the key Unkey verified.","required":["key_id"],"properties":{"key_id":{"type":"string","title":"Key Id","isRequired":true,"uniqueKey":"review.oneOf.0.by.oneOf.0.key_id","typeLabel":"string"},"actor":{"type":"string","const":"api-key","title":"Actor","default":"api-key","uniqueKey":"review.oneOf.0.by.oneOf.0.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.0.by.oneOf.0","typeLabel":"KeyActor · object"},{"type":"object","title":"UserActor","description":"A person signed in to the dashboard, named by their identity on its Clerk app.","required":["clerk_user_id"],"properties":{"clerk_user_id":{"type":"string","title":"Clerk User Id","isRequired":true,"uniqueKey":"review.oneOf.0.by.oneOf.1.clerk_user_id","typeLabel":"string"},"actor":{"type":"string","const":"user","title":"Actor","default":"user","uniqueKey":"review.oneOf.0.by.oneOf.1.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.0.by.oneOf.1","typeLabel":"UserActor · object"}],"isRequired":true,"uniqueKey":"review.oneOf.0.by","typeLabel":"KeyActor · object | UserActor · object"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.0.reason","typeLabel":"string | null"},"callback":{"oneOf":[{"type":"object","title":"CallbackRecord","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","required":["status","settled_at","reason"],"properties":{"status":{"type":"string","enum":["delivered","failed"],"title":"CallbackStatus","description":"delivered once your endpoint accepted the callback; failed once every attempt at it was spent without one being accepted.","isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0.status","typeLabel":"enum\u003cstring>"},"settled_at":{"type":"string","format":"date-time","title":"Settled At","description":"When the callback was accepted, or when the attempts ran out.","isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0.settled_at","typeLabel":"string\u003cdate-time>"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0.reason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.0","typeLabel":"CallbackRecord · object"},{"type":"null","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","isRequired":true,"uniqueKey":"review.oneOf.0.callback.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.0.callback","typeLabel":"CallbackRecord · object | null"},"verdict":{"type":"string","const":"approved","title":"Verdict","description":"`approved`, posted as `verification.approved`. Once the last of its contracts is signed the run is completed by that signature, which `completion_callback` reports, and this callback is no longer posted.","isRequired":true,"uniqueKey":"review.oneOf.0.verdict","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.0","typeLabel":"ApprovedReviewRecord · object"},{"type":"object","title":"RejectedReviewRecord","description":"A rejection.","required":["at","by","reason","callback","verdict"],"properties":{"at":{"type":"string","format":"date-time","title":"At","description":"When it was given.","isRequired":true,"uniqueKey":"review.oneOf.1.at","typeLabel":"string\u003cdate-time>"},"by":{"oneOf":[{"type":"object","title":"KeyActor","description":"An API key acting for the client, named by the key Unkey verified.","required":["key_id"],"properties":{"key_id":{"type":"string","title":"Key Id","isRequired":true,"uniqueKey":"review.oneOf.1.by.oneOf.0.key_id","typeLabel":"string"},"actor":{"type":"string","const":"api-key","title":"Actor","default":"api-key","uniqueKey":"review.oneOf.1.by.oneOf.0.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.1.by.oneOf.0","typeLabel":"KeyActor · object"},{"type":"object","title":"UserActor","description":"A person signed in to the dashboard, named by their identity on its Clerk app.","required":["clerk_user_id"],"properties":{"clerk_user_id":{"type":"string","title":"Clerk User Id","isRequired":true,"uniqueKey":"review.oneOf.1.by.oneOf.1.clerk_user_id","typeLabel":"string"},"actor":{"type":"string","const":"user","title":"Actor","default":"user","uniqueKey":"review.oneOf.1.by.oneOf.1.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.1.by.oneOf.1","typeLabel":"UserActor · object"}],"isRequired":true,"uniqueKey":"review.oneOf.1.by","typeLabel":"KeyActor · object | UserActor · object"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.1.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.1.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.1.reason","typeLabel":"string | null"},"callback":{"oneOf":[{"type":"object","title":"CallbackRecord","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","required":["status","settled_at","reason"],"properties":{"status":{"type":"string","enum":["delivered","failed"],"title":"CallbackStatus","description":"delivered once your endpoint accepted the callback; failed once every attempt at it was spent without one being accepted.","isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0.status","typeLabel":"enum\u003cstring>"},"settled_at":{"type":"string","format":"date-time","title":"Settled At","description":"When the callback was accepted, or when the attempts ran out.","isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0.settled_at","typeLabel":"string\u003cdate-time>"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0.reason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.0","typeLabel":"CallbackRecord · object"},{"type":"null","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","isRequired":true,"uniqueKey":"review.oneOf.1.callback.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.1.callback","typeLabel":"CallbackRecord · object | null"},"verdict":{"type":"string","const":"rejected","title":"Verdict","description":"`rejected`, posted as `verification.rejected`.","isRequired":true,"uniqueKey":"review.oneOf.1.verdict","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.1","typeLabel":"RejectedReviewRecord · object"},{"type":"object","title":"ReopenedReviewRecord","description":"A reopen, which sent the run back to the user to answer some of its steps again; it reads `open` until then.","required":["at","by","reason","callback","verdict","steps","message"],"properties":{"at":{"type":"string","format":"date-time","title":"At","description":"When it was given.","isRequired":true,"uniqueKey":"review.oneOf.2.at","typeLabel":"string\u003cdate-time>"},"by":{"oneOf":[{"type":"object","title":"KeyActor","description":"An API key acting for the client, named by the key Unkey verified.","required":["key_id"],"properties":{"key_id":{"type":"string","title":"Key Id","isRequired":true,"uniqueKey":"review.oneOf.2.by.oneOf.0.key_id","typeLabel":"string"},"actor":{"type":"string","const":"api-key","title":"Actor","default":"api-key","uniqueKey":"review.oneOf.2.by.oneOf.0.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.2.by.oneOf.0","typeLabel":"KeyActor · object"},{"type":"object","title":"UserActor","description":"A person signed in to the dashboard, named by their identity on its Clerk app.","required":["clerk_user_id"],"properties":{"clerk_user_id":{"type":"string","title":"Clerk User Id","isRequired":true,"uniqueKey":"review.oneOf.2.by.oneOf.1.clerk_user_id","typeLabel":"string"},"actor":{"type":"string","const":"user","title":"Actor","default":"user","uniqueKey":"review.oneOf.2.by.oneOf.1.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"review.oneOf.2.by.oneOf.1","typeLabel":"UserActor · object"}],"isRequired":true,"uniqueKey":"review.oneOf.2.by","typeLabel":"KeyActor · object | UserActor · object"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.2.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why, as it was given. Null where none was, and once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.2.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.2.reason","typeLabel":"string | null"},"callback":{"oneOf":[{"type":"object","title":"CallbackRecord","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","required":["status","settled_at","reason"],"properties":{"status":{"type":"string","enum":["delivered","failed"],"title":"CallbackStatus","description":"delivered once your endpoint accepted the callback; failed once every attempt at it was spent without one being accepted.","isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0.status","typeLabel":"enum\u003cstring>"},"settled_at":{"type":"string","format":"date-time","title":"Settled At","description":"When the callback was accepted, or when the attempts ran out.","isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0.settled_at","typeLabel":"string\u003cdate-time>"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0.reason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.0","typeLabel":"CallbackRecord · object"},{"type":"null","description":"How the callback for this review ended. Null until it settles, and on every verification of a workflow with no callback endpoint registered.","isRequired":true,"uniqueKey":"review.oneOf.2.callback.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.2.callback","typeLabel":"CallbackRecord · object | null"},"verdict":{"type":"string","const":"reopened","title":"Verdict","description":"`reopened`, posted as `verification.reopened`.","isRequired":true,"uniqueKey":"review.oneOf.2.verdict","typeLabel":"string"},"steps":{"items":{"type":"string","uniqueKey":"review.oneOf.2.steps.items.[INDEX]","typeLabel":"string"},"type":"array","title":"Steps","description":"The steps reopened, in the order the journey presents them. The user answers each of them again before they can submit, unless their changes take it out of their journey, and can change any other answer too.","isRequired":true,"uniqueKey":"review.oneOf.2.steps","typeLabel":"string[]"},"message":{"oneOf":[{"type":"string","title":"Message","description":"What the user was told to correct, which their journey shows them and their invitation carries. Null once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.2.message.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message","description":"What the user was told to correct, which their journey shows them and their invitation carries. Null once the verification expires, which deletes it.","isRequired":true,"uniqueKey":"review.oneOf.2.message.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review.oneOf.2.message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"review.oneOf.2","typeLabel":"ReopenedReviewRecord · object"},{"type":"null","title":"Review","description":"Your verdict on what the user submitted, given over the API or on the dashboard: `approved`, `rejected` or `reopened`. It stands while the run stays where the verdict left it, so a reset clears it, and so does the user submitting a run you reopened, or the reopened run ending any other way. An expiry keeps it, without its reason or message. Null before you review a run, on a run its workflow approved as it finished, and on a verification you supplied yourself. The verification's history on the dashboard keeps every review.","isRequired":true,"uniqueKey":"review.oneOf.3","typeLabel":"null"}],"isRequired":true,"uniqueKey":"review","typeLabel":"ApprovedReviewRecord · object | RejectedReviewRecord · object | ReopenedReviewRecord · object | null"},"reopen":{"oneOf":[{"type":"object","title":"ReopenRecord","description":"Your latest reopen of the run, and every step to look at again since: each step it sent back and every other step that differs from then, so you know what changed before you give your verdict. It stands from the reopen until you approve, reject, reset or cancel the run, through the user submitting it again, which clears `review`. Null on every other run, and once the verification expires.","required":["at","by","message","reason","steps"],"properties":{"at":{"type":"string","format":"date-time","title":"At","description":"When the run was reopened.","isRequired":true,"uniqueKey":"reopen.oneOf.0.at","typeLabel":"string\u003cdate-time>"},"by":{"oneOf":[{"type":"object","title":"KeyActor","description":"An API key acting for the client, named by the key Unkey verified.","required":["key_id"],"properties":{"key_id":{"type":"string","title":"Key Id","isRequired":true,"uniqueKey":"reopen.oneOf.0.by.oneOf.0.key_id","typeLabel":"string"},"actor":{"type":"string","const":"api-key","title":"Actor","default":"api-key","uniqueKey":"reopen.oneOf.0.by.oneOf.0.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"reopen.oneOf.0.by.oneOf.0","typeLabel":"KeyActor · object"},{"type":"object","title":"UserActor","description":"A person signed in to the dashboard, named by their identity on its Clerk app.","required":["clerk_user_id"],"properties":{"clerk_user_id":{"type":"string","title":"Clerk User Id","isRequired":true,"uniqueKey":"reopen.oneOf.0.by.oneOf.1.clerk_user_id","typeLabel":"string"},"actor":{"type":"string","const":"user","title":"Actor","default":"user","uniqueKey":"reopen.oneOf.0.by.oneOf.1.actor","typeLabel":"string"}},"isRequired":true,"uniqueKey":"reopen.oneOf.0.by.oneOf.1","typeLabel":"UserActor · object"}],"isRequired":true,"uniqueKey":"reopen.oneOf.0.by","typeLabel":"KeyActor · object | UserActor · object"},"message":{"type":"string","title":"Message","description":"What the user was told to correct, as you wrote it.","isRequired":true,"uniqueKey":"reopen.oneOf.0.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why you reopened it, for your own people, where you gave a reason.","isRequired":true,"uniqueKey":"reopen.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why you reopened it, for your own people, where you gave a reason.","isRequired":true,"uniqueKey":"reopen.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reopen.oneOf.0.reason","typeLabel":"string | null"},"steps":{"items":{"properties":{"key":{"type":"string","title":"Key","description":"The step's key.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].key","typeLabel":"string"},"sent_back":{"type":"boolean","title":"Sent Back","description":"Whether your reopen named the step. A step you did not name is listed only where it differs from when you reopened the run: the user changed it, their changes brought it into their journey or took it out, or a check reading what they changed now concludes differently.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].sent_back","typeLabel":"boolean"},"standing":{"type":"string","enum":["waiting","changed","unchanged"],"title":"ReopenedStepStanding","description":"What the user did with the step. `waiting` while they have still to act on it, which only an `open` run reads: a step you sent back until they act on it again or their changes take it out of their journey, and one their changes left holding up their submitting, such as a step those changes brought into the journey. `changed` once what the step holds differs from what it held when you reopened the run: its answer, or the content of its files. `unchanged` while it holds the same, a change made and undone included.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].standing","typeLabel":"enum\u003cstring>"},"outcome_changed":{"type":"boolean","title":"Outcome Changed","description":"Whether what the step concluded differs from when you reopened the run: its state, or what it published. A check reading what the user changed can conclude differently though they never touched it.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].outcome_changed","typeLabel":"boolean"},"asked_at_reopen":{"type":"boolean","title":"Asked At Reopen","description":"Whether the user's journey asked the step when you reopened the run.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].asked_at_reopen","typeLabel":"boolean"},"asked":{"type":"boolean","title":"Asked","description":"Whether their journey asks it now. A step it no longer asks is listed here, and not among the verification's own `steps`.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps.items.[INDEX].asked","typeLabel":"boolean"}},"type":"object","required":["key","sent_back","standing","outcome_changed","asked_at_reopen","asked"],"title":"ReopenedStepRecord","description":"One step to look at again since you reopened the run, and how it differs from then.\n\nWhile a step's place in the user's journey waits on an earlier step still to settle, such as a gate check their changes ask again, it reads as it stood when you reopened the run, all but `standing`, until that step settles.","uniqueKey":"reopen.oneOf.0.steps.items.[INDEX]","typeLabel":"ReopenedStepRecord · object"},"type":"array","title":"Steps","description":"Every step you sent back, and every other step that differs from then, in journey order.","isRequired":true,"uniqueKey":"reopen.oneOf.0.steps","typeLabel":"ReopenedStepRecord · object[]"}},"isRequired":true,"uniqueKey":"reopen.oneOf.0","typeLabel":"ReopenRecord · object"},{"type":"null","description":"Your latest reopen of the run, and every step to look at again since: each step it sent back and every other step that differs from then, so you know what changed before you give your verdict. It stands from the reopen until you approve, reject, reset or cancel the run, through the user submitting it again, which clears `review`. Null on every other run, and once the verification expires.","isRequired":true,"uniqueKey":"reopen.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reopen","typeLabel":"ReopenRecord · object | null"},"cancelled_at":{"oneOf":[{"type":"string","title":"Cancelled At","description":"When the verification was cancelled, if it was.","format":"date-time","isRequired":true,"uniqueKey":"cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Cancelled At","description":"When the verification was cancelled, if it was.","isRequired":true,"uniqueKey":"cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cancelled_at","typeLabel":"string\u003cdate-time> | null"},"gated_at":{"oneOf":[{"type":"string","title":"Gated At","description":"When one of your gate checks ended the run, if one did.","format":"date-time","isRequired":true,"uniqueKey":"gated_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Gated At","description":"When one of your gate checks ended the run, if one did.","isRequired":true,"uniqueKey":"gated_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"gated_at","typeLabel":"string\u003cdate-time> | null"},"gated_by_step":{"oneOf":[{"type":"string","title":"Gated By Step","description":"The gate check that ended the run, if one did. A workflow may declare more than one, and this says which.\n\nIt is set and cleared with `gated_at`: it stays set once the verification expires or you purge it, so the record still says how the run had ended, and a reset clears both.","isRequired":true,"uniqueKey":"gated_by_step.oneOf.0","typeLabel":"string"},{"type":"null","title":"Gated By Step","description":"The gate check that ended the run, if one did. A workflow may declare more than one, and this says which.\n\nIt is set and cleared with `gated_at`: it stays set once the verification expires or you purge it, so the record still says how the run had ended, and a reset clears both.","isRequired":true,"uniqueKey":"gated_by_step.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"gated_by_step","typeLabel":"string | null"},"failed_at":{"oneOf":[{"type":"string","title":"Failed At","description":"When the verification was marked failed, if it was.","format":"date-time","isRequired":true,"uniqueKey":"failed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Failed At","description":"When the verification was marked failed, if it was.","isRequired":true,"uniqueKey":"failed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failed_at","typeLabel":"string\u003cdate-time> | null"},"expired_at":{"oneOf":[{"type":"string","title":"Expired At","description":"When the verification expired, if it has. From that moment it is kept for your audit and nothing else: it holds what each step concluded and nothing the user gave, so no answers, no values read off their documents, and no files. The step states you read are the ones frozen at that moment. Read the other timestamps to see how it had ended before it expired.","format":"date-time","isRequired":true,"uniqueKey":"expired_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Expired At","description":"When the verification expired, if it has. From that moment it is kept for your audit and nothing else: it holds what each step concluded and nothing the user gave, so no answers, no values read off their documents, and no files. The step states you read are the ones frozen at that moment. Read the other timestamps to see how it had ended before it expired.","isRequired":true,"uniqueKey":"expired_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expired_at","typeLabel":"string\u003cdate-time> | null"},"expired_by":{"oneOf":[{"type":"string","title":"ExpiryCause","description":"What expired the verification. `retention` when its workflow's retention window ran out; `client` when you purged it. Null until it expires.","enum":["retention","client"],"isRequired":true,"uniqueKey":"expired_by.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"What expired the verification. `retention` when its workflow's retention window ran out; `client` when you purged it. Null until it expires.","isRequired":true,"uniqueKey":"expired_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expired_by","typeLabel":"enum\u003cstring> | null"},"last_activity_at":{"type":"string","format":"date-time","title":"Last Activity At","description":"When the verification was last acted on: by the user on a hosted workflow, by you or by the run of the checks on one you supplied yourself, by you cancelling, resetting or reopening it, or by one of its contracts being sent, withdrawn or reaching its end. Approving or rejecting it, reminding a contract's signers and reading anything leave it as it was. A verification that is created and never touched reads the moment it was created. `expires_after_days` is counted from here.","isRequired":true,"uniqueKey":"last_activity_at","typeLabel":"string\u003cdate-time>"},"expires_after_days":{"type":"integer","maximum":36135,"minimum":1,"title":"Expires After Days","description":"How many days this verification may go without activity before it expires and everything the user provided is deleted, as the version it runs states.\n\nIt is this verification's own window: a later version of its workflow can state a different one, which reaches the verifications created or reset after it, so read the window here rather than off the workflow. On an expired verification it is the window it was held to.","isRequired":true,"uniqueKey":"expires_after_days","typeLabel":"integer"},"expires_at":{"oneOf":[{"type":"string","title":"Expires At","description":"When the verification expires if nothing more happens to it: `last_activity_at` plus `expires_after_days`. Any activity moves it later. Null once it has expired.","format":"date-time","isRequired":true,"uniqueKey":"expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Expires At","description":"When the verification expires if nothing more happens to it: `last_activity_at` plus `expires_after_days`. Any activity moves it later. Null once it has expired.","isRequired":true,"uniqueKey":"expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time> | null"},"invitation":{"oneOf":[{"type":"object","title":"InvitationRecord","description":"How the journey link went out to the user over each contact you gave, on a hosted verification whose version sends invitations. It is sent once the verification is created, again when it is reset, and whenever you ask for it to be sent again; this holds the latest, and a reset clears it until the new one has gone out. One created with `invite` false is sent none until you ask for it.\n\nNull until the first has been sent, on a verification whose version sends no invitations, on one you supplied yourself, and where it could not be sent at all, in which case ask for it again or send `journey_url` yourself.","required":["requested_at","email","sms"],"properties":{"requested_at":{"type":"string","format":"date-time","title":"Requested At","description":"When this invitation was asked for: as the verification was created or reset, or when you asked for it to be sent again.","isRequired":true,"uniqueKey":"invitation.oneOf.0.requested_at","typeLabel":"string\u003cdate-time>"},"email":{"oneOf":[{"type":"object","title":"InvitationDelivery","description":"Over email. Null where the verification has no email.","required":["status","sent_at","message_id"],"properties":{"status":{"type":"string","enum":["sent","not-sent"],"title":"InvitationStatus","description":"`sent`: we delivered the journey link over this contact. `not-sent`: we did not, so send `journey_url` to your user yourself.","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.status","typeLabel":"enum\u003cstring>"},"sent_at":{"oneOf":[{"type":"string","title":"Sent At","description":"When it was sent. Null where it was not.","format":"date-time","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.sent_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Sent At","description":"When it was sent. Null where it was not.","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.sent_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.sent_at","typeLabel":"string\u003cdate-time> | null"},"message_id":{"oneOf":[{"type":"string","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.message_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0.message_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.0","typeLabel":"InvitationDelivery · object"},{"type":"null","description":"Over email. Null where the verification has no email.","isRequired":true,"uniqueKey":"invitation.oneOf.0.email.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.email","typeLabel":"InvitationDelivery · object | null"},"sms":{"oneOf":[{"type":"object","title":"InvitationDelivery","description":"Over SMS. Null where the verification has no mobile number.","required":["status","sent_at","message_id"],"properties":{"status":{"type":"string","enum":["sent","not-sent"],"title":"InvitationStatus","description":"`sent`: we delivered the journey link over this contact. `not-sent`: we did not, so send `journey_url` to your user yourself.","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.status","typeLabel":"enum\u003cstring>"},"sent_at":{"oneOf":[{"type":"string","title":"Sent At","description":"When it was sent. Null where it was not.","format":"date-time","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.sent_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Sent At","description":"When it was sent. Null where it was not.","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.sent_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.sent_at","typeLabel":"string\u003cdate-time> | null"},"message_id":{"oneOf":[{"type":"string","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.message_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0.message_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.0","typeLabel":"InvitationDelivery · object"},{"type":"null","description":"Over SMS. Null where the verification has no mobile number.","isRequired":true,"uniqueKey":"invitation.oneOf.0.sms.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation.oneOf.0.sms","typeLabel":"InvitationDelivery · object | null"}},"isRequired":true,"uniqueKey":"invitation.oneOf.0","typeLabel":"InvitationRecord · object"},{"type":"null","description":"How the journey link went out to the user over each contact you gave, on a hosted verification whose version sends invitations. It is sent once the verification is created, again when it is reset, and whenever you ask for it to be sent again; this holds the latest, and a reset clears it until the new one has gone out. One created with `invite` false is sent none until you ask for it.\n\nNull until the first has been sent, on a verification whose version sends no invitations, on one you supplied yourself, and where it could not be sent at all, in which case ask for it again or send `journey_url` yourself.","isRequired":true,"uniqueKey":"invitation.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invitation","typeLabel":"InvitationRecord · object | null"},"reminder":{"oneOf":[{"type":"object","title":"InvitationRecord","description":"How the latest reminder to finish their journey went out to the user over each contact you gave, once you have asked for one. Null until the first has been sent, and again once the verification is reset.","required":["requested_at","email","sms"],"properties":{"requested_at":{"type":"string","format":"date-time","title":"Requested At","description":"When this invitation was asked for: as the verification was created or reset, or when you asked for it to be sent again.","isRequired":true,"uniqueKey":"reminder.oneOf.0.requested_at","typeLabel":"string\u003cdate-time>"},"email":{"oneOf":[{"type":"object","title":"InvitationDelivery","description":"Over email. Null where the verification has no email.","required":["status","sent_at","message_id"],"properties":{"status":{"type":"string","enum":["sent","not-sent"],"title":"InvitationStatus","description":"`sent`: we delivered the journey link over this contact. `not-sent`: we did not, so send `journey_url` to your user yourself.","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.status","typeLabel":"enum\u003cstring>"},"sent_at":{"oneOf":[{"type":"string","title":"Sent At","description":"When it was sent. Null where it was not.","format":"date-time","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.sent_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Sent At","description":"When it was sent. Null where it was not.","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.sent_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.sent_at","typeLabel":"string\u003cdate-time> | null"},"message_id":{"oneOf":[{"type":"string","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.message_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0.message_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.0","typeLabel":"InvitationDelivery · object"},{"type":"null","description":"Over email. Null where the verification has no email.","isRequired":true,"uniqueKey":"reminder.oneOf.0.email.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.email","typeLabel":"InvitationDelivery · object | null"},"sms":{"oneOf":[{"type":"object","title":"InvitationDelivery","description":"Over SMS. Null where the verification has no mobile number.","required":["status","sent_at","message_id"],"properties":{"status":{"type":"string","enum":["sent","not-sent"],"title":"InvitationStatus","description":"`sent`: we delivered the journey link over this contact. `not-sent`: we did not, so send `journey_url` to your user yourself.","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.status","typeLabel":"enum\u003cstring>"},"sent_at":{"oneOf":[{"type":"string","title":"Sent At","description":"When it was sent. Null where it was not.","format":"date-time","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.sent_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Sent At","description":"When it was sent. Null where it was not.","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.sent_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.sent_at","typeLabel":"string\u003cdate-time> | null"},"message_id":{"oneOf":[{"type":"string","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message Id","description":"The identifier of the email that was sent, for tracing one send. Null on a text and where nothing was sent.","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.message_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0.message_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.0","typeLabel":"InvitationDelivery · object"},{"type":"null","description":"Over SMS. Null where the verification has no mobile number.","isRequired":true,"uniqueKey":"reminder.oneOf.0.sms.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder.oneOf.0.sms","typeLabel":"InvitationDelivery · object | null"}},"isRequired":true,"uniqueKey":"reminder.oneOf.0","typeLabel":"InvitationRecord · object"},{"type":"null","description":"How the latest reminder to finish their journey went out to the user over each contact you gave, once you have asked for one. Null until the first has been sent, and again once the verification is reset.","isRequired":true,"uniqueKey":"reminder.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"reminder","typeLabel":"InvitationRecord · object | null"},"acknowledgement":{"oneOf":[{"type":"object","title":"AcknowledgementRecord","description":"The receipt the user was sent telling them their submission arrived, on a workflow that acknowledges submissions by email. Null wherever nothing has been sent: a workflow that acknowledges nothing, a verification carrying no address to send to, a submission still being finalised, and a send that could not be made.\n\nIt names the submission it answers. A reset undoes a submission without unsending its receipt, so read `submitted_at` here against the record's own to tell a receipt for the submission this record stands in from one for a submission it no longer does.","required":["submitted_at","sent_at","message_id"],"properties":{"submitted_at":{"type":"string","format":"date-time","title":"Submitted At","description":"The submission this receipt answers.","isRequired":true,"uniqueKey":"acknowledgement.oneOf.0.submitted_at","typeLabel":"string\u003cdate-time>"},"sent_at":{"type":"string","format":"date-time","title":"Sent At","description":"When it was sent.","isRequired":true,"uniqueKey":"acknowledgement.oneOf.0.sent_at","typeLabel":"string\u003cdate-time>"},"message_id":{"type":"string","title":"Message Id","description":"The identifier of the message that was sent, for tracing one send.","isRequired":true,"uniqueKey":"acknowledgement.oneOf.0.message_id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"acknowledgement.oneOf.0","typeLabel":"AcknowledgementRecord · object"},{"type":"null","description":"The receipt the user was sent telling them their submission arrived, on a workflow that acknowledges submissions by email. Null wherever nothing has been sent: a workflow that acknowledges nothing, a verification carrying no address to send to, a submission still being finalised, and a send that could not be made.\n\nIt names the submission it answers. A reset undoes a submission without unsending its receipt, so read `submitted_at` here against the record's own to tell a receipt for the submission this record stands in from one for a submission it no longer does.","isRequired":true,"uniqueKey":"acknowledgement.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"acknowledgement","typeLabel":"AcknowledgementRecord · object | null"},"callback":{"oneOf":[{"type":"object","title":"CallbackRecord","description":"How the callback for this verification's run ended: `verification.submitted` once it was submitted, or `verification.gated` once one of your gate checks ended it. Null until the callback settles, and on every verification of a workflow with no callback endpoint registered. A verification completes, or stays gated, whether or not its callback was delivered, so read this to tell a result you were told about from one you were not. Reopening the verification clears it, and the user's next submission is called back afresh.","required":["status","settled_at","reason"],"properties":{"status":{"type":"string","enum":["delivered","failed"],"title":"CallbackStatus","description":"delivered once your endpoint accepted the callback; failed once every attempt at it was spent without one being accepted.","isRequired":true,"uniqueKey":"callback.oneOf.0.status","typeLabel":"enum\u003cstring>"},"settled_at":{"type":"string","format":"date-time","title":"Settled At","description":"When the callback was accepted, or when the attempts ran out.","isRequired":true,"uniqueKey":"callback.oneOf.0.settled_at","typeLabel":"string\u003cdate-time>"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"callback.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"callback.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"callback.oneOf.0.reason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"callback.oneOf.0","typeLabel":"CallbackRecord · object"},{"type":"null","description":"How the callback for this verification's run ended: `verification.submitted` once it was submitted, or `verification.gated` once one of your gate checks ended it. Null until the callback settles, and on every verification of a workflow with no callback endpoint registered. A verification completes, or stays gated, whether or not its callback was delivered, so read this to tell a result you were told about from one you were not. Reopening the verification clears it, and the user's next submission is called back afresh.","isRequired":true,"uniqueKey":"callback.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"callback","typeLabel":"CallbackRecord · object | null"},"completion_callback":{"oneOf":[{"type":"object","title":"CallbackRecord","description":"How the `verification.completed` callback ended, which the last signature completing the run owes you. Null until it settles, on a run no signature completed, and on every verification of a workflow with no callback endpoint registered.","required":["status","settled_at","reason"],"properties":{"status":{"type":"string","enum":["delivered","failed"],"title":"CallbackStatus","description":"delivered once your endpoint accepted the callback; failed once every attempt at it was spent without one being accepted.","isRequired":true,"uniqueKey":"completion_callback.oneOf.0.status","typeLabel":"enum\u003cstring>"},"settled_at":{"type":"string","format":"date-time","title":"Settled At","description":"When the callback was accepted, or when the attempts ran out.","isRequired":true,"uniqueKey":"completion_callback.oneOf.0.settled_at","typeLabel":"string\u003cdate-time>"},"reason":{"oneOf":[{"type":"string","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"completion_callback.oneOf.0.reason.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reason","description":"Why no attempt was accepted, on a failed callback: what your endpoint last answered, or that it was never sent, through a fault on our side. Null on a delivered one.","isRequired":true,"uniqueKey":"completion_callback.oneOf.0.reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completion_callback.oneOf.0.reason","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"completion_callback.oneOf.0","typeLabel":"CallbackRecord · object"},{"type":"null","description":"How the `verification.completed` callback ended, which the last signature completing the run owes you. Null until it settles, on a run no signature completed, and on every verification of a workflow with no callback endpoint registered.","isRequired":true,"uniqueKey":"completion_callback.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completion_callback","typeLabel":"CallbackRecord · object | null"},"credits_consumed":{"type":"integer","title":"Credits Consumed","description":"How many credits this verification has used. A run uses one credit when it first reaches pending-approval, pending-signature, completed, cancelled or expired, whatever the workflow asks for and however many of its checks ran, and approving, rejecting or reopening it uses nothing more, nor does the user submitting a reopened run again. Each contract sent on it uses a contract credit instead, which the workflow's `contract_credits` counts. A run that ends as failed or gated uses none, and one still open or submitted has used nothing yet.\n\nResetting a verification runs the subject through again, which is a run of its own and uses a credit of its own, so a record reset twice and completed each time reads `3`.","isRequired":true,"uniqueKey":"credits_consumed","typeLabel":"integer"},"resets":{"type":"integer","title":"Resets","description":"How many times this verification has been reset. A reset clears everything the record collected and runs the subject through the checks again, so a verification reading `2` is on its third run and holds what that one has collected.\n\nEach of these opened a run charged a credit of its own where it ended, which is what `credits_consumed` counts. A reset that cleared a run no credit had paid for also drew one of the workflow's resets: see `resets` on the workflow.","isRequired":true,"uniqueKey":"resets","typeLabel":"integer"},"progress":{"properties":{"total":{"type":"integer","title":"Total","description":"How many steps the workflow declares. Counted whichever steps the record reports, so on a journey that took one branch this is more than `steps` holds.","isRequired":true,"uniqueKey":"progress.total","typeLabel":"integer"},"passed":{"type":"integer","title":"Passed","description":"Steps that were checked and passed.","isRequired":true,"uniqueKey":"progress.passed","typeLabel":"integer"},"failed":{"type":"integer","title":"Failed","description":"Steps that were checked and did not pass.","isRequired":true,"uniqueKey":"progress.failed","typeLabel":"integer"},"awaiting":{"type":"integer","title":"Awaiting","description":"Steps the user has not answered yet.","isRequired":true,"uniqueKey":"progress.awaiting","typeLabel":"integer"},"enriching":{"type":"integer","title":"Enriching","description":"Steps whose checks are still running.","isRequired":true,"uniqueKey":"progress.enriching","typeLabel":"integer"},"error":{"type":"integer","title":"Error","description":"Steps where a check could not run.","isRequired":true,"uniqueKey":"progress.error","typeLabel":"integer"},"declined":{"type":"integer","title":"Declined","description":"Steps the user chose not to provide.","isRequired":true,"uniqueKey":"progress.declined","typeLabel":"integer"},"not_supplied":{"type":"integer","title":"Not Supplied","description":"Steps the run closed over with nothing provided for them.","isRequired":true,"uniqueKey":"progress.not_supplied","typeLabel":"integer"},"undetermined":{"type":"integer","title":"Undetermined","description":"Steps whose place in this journey is not settled yet, because whether they are asked for turns on something that has still to happen. These are reported in `steps`.","isRequired":true,"uniqueKey":"progress.undetermined","typeLabel":"integer"},"not_applicable":{"type":"integer","title":"Not Applicable","description":"Steps this journey ruled out, which the record leaves out of `steps`. Read the verification with `include_not_applicable` to see them.","isRequired":true,"uniqueKey":"progress.not_applicable","typeLabel":"integer"}},"type":"object","required":["total","passed","failed","awaiting","enriching","error","declined","not_supplied","undetermined","not_applicable"],"title":"ProgressRecord","description":"Every step of the journey counted by where it stands, the ones left out included.","isRequired":true,"uniqueKey":"progress","typeLabel":"ProgressRecord · object"},"steps":{"items":{"properties":{"key":{"type":"string","title":"Key","description":"The step's key within the workflow.","isRequired":true,"uniqueKey":"steps.items.[INDEX].key","typeLabel":"string"},"title":{"oneOf":[{"type":"string","title":"Title","description":"The heading this step is presented under, in your workflow's own words. Null only where the workflow no longer declares the step, which a record read after its workflow changed can hold.","isRequired":true,"uniqueKey":"steps.items.[INDEX].title.oneOf.0","typeLabel":"string"},{"type":"null","title":"Title","description":"The heading this step is presented under, in your workflow's own words. Null only where the workflow no longer declares the step, which a record read after its workflow changed can hold.","isRequired":true,"uniqueKey":"steps.items.[INDEX].title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"steps.items.[INDEX].title","typeLabel":"string | null"},"label":{"oneOf":[{"type":"string","title":"Label","description":"Your own name for this step, where your workflow carries one. Several steps may share one, so a journey that asks a sole proprietor, a partner and a director each for a PAN reads the same name on whichever of them ran. Null where the workflow carries none; the `key` is what names this step everywhere.","isRequired":true,"uniqueKey":"steps.items.[INDEX].label.oneOf.0","typeLabel":"string"},{"type":"null","title":"Label","description":"Your own name for this step, where your workflow carries one. Several steps may share one, so a journey that asks a sole proprietor, a partner and a director each for a PAN reads the same name on whichever of them ran. Null where the workflow carries none; the `key` is what names this step everywhere.","isRequired":true,"uniqueKey":"steps.items.[INDEX].label.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"steps.items.[INDEX].label","typeLabel":"string | null"},"type":{"type":"string","enum":["form","documents","parsed-documents","pan-card","bank-account","gst-certificate","digilocker","selfie","premises-photos","address-tagging","address-proof","udyam","pcb-certificate","aadhaar","name-match","onboarding-prerequisites","gate-check","terms","nominees","interest-disclosure","investment-restrictions","review"],"title":"StepType","description":"The step's type.","isRequired":true,"uniqueKey":"steps.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"required":{"type":"boolean","title":"Required","description":"Whether the journey cannot be submitted without this step.","isRequired":true,"uniqueKey":"steps.items.[INDEX].required","typeLabel":"boolean"},"state":{"type":"string","enum":["not-applicable","undetermined","awaiting","enriching","error","passed","failed","declined","not-supplied"],"title":"StepState","description":"Where the step stands. declined means the user chose not to provide it; not-supplied means the run closed with nothing provided for it, so it was closed over rather than left waiting; enriching means the step's checks are still running; error means a check could not run and will be retried; passed and failed are the outcomes of those checks; awaiting means the user has not answered it yet.\n\nundetermined means whether this journey asks for the step at all turns on something that has yet to happen, such as a value an earlier step will publish. It is not a step being waited on and not one ruled out: read it as a question the journey has not reached. It settles into one of the other states as the journey does, except where a verification ends with a check that never ran: the steps that turned on that check stay undetermined on the finished record.\n\nnot-applicable means this journey did not ask for the step, because your workflow's rules ruled it out or because a value it reads was settled without being established. That is a conclusion rather than an open question, and the record leaves those steps out, so you only meet this state on one you read with `include_not_applicable`.","isRequired":true,"uniqueKey":"steps.items.[INDEX].state","typeLabel":"enum\u003cstring>"},"reasons":{"items":{"properties":{"code":{"type":"string","title":"Code","description":"A stable identifier for the reason.","isRequired":true,"uniqueKey":"steps.items.[INDEX].reasons.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"A readable explanation of the reason.","isRequired":true,"uniqueKey":"steps.items.[INDEX].reasons.items.[INDEX].message","typeLabel":"string"},"details":{"additionalProperties":true,"type":"object","title":"Details","description":"What the reason is about, as the values its message was written from. Keyed per code and not a fixed shape, so read a key you know and ignore the rest. A reason about one of a step's document slots carries that slot's key as `slot`, which is what attributes it to a single document rather than to the step as a whole.\n\nEmpty on a record whose collected data has been cleared: the specifics go with the material, and only the code and the message are kept.","uniqueKey":"steps.items.[INDEX].reasons.items.[INDEX].details","typeLabel":"Details · object"}},"type":"object","required":["code","message"],"title":"StepReason","description":"One machine-readable reason a step has not passed.","uniqueKey":"steps.items.[INDEX].reasons.items.[INDEX]","typeLabel":"StepReason · object"},"type":"array","title":"Reasons","description":"Why the step has not passed, when it has not.","isRequired":true,"uniqueKey":"steps.items.[INDEX].reasons","typeLabel":"StepReason · object[]"},"gaps":{"items":{"properties":{"code":{"type":"string","title":"Code","description":"A stable identifier for the reason.","isRequired":true,"uniqueKey":"steps.items.[INDEX].gaps.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"A readable explanation of the reason.","isRequired":true,"uniqueKey":"steps.items.[INDEX].gaps.items.[INDEX].message","typeLabel":"string"},"details":{"additionalProperties":true,"type":"object","title":"Details","description":"What the reason is about, as the values its message was written from. Keyed per code and not a fixed shape, so read a key you know and ignore the rest. A reason about one of a step's document slots carries that slot's key as `slot`, which is what attributes it to a single document rather than to the step as a whole.\n\nEmpty on a record whose collected data has been cleared: the specifics go with the material, and only the code and the message are kept.","uniqueKey":"steps.items.[INDEX].gaps.items.[INDEX].details","typeLabel":"Details · object"}},"type":"object","required":["code","message"],"title":"StepReason","description":"One machine-readable reason a step has not passed.","uniqueKey":"steps.items.[INDEX].gaps.items.[INDEX]","typeLabel":"StepReason · object"},"type":"array","title":"Gaps","description":"What a passed step passed without: optional pieces it asked for that did not arrive. Empty unless the step passed.","isRequired":true,"uniqueKey":"steps.items.[INDEX].gaps","typeLabel":"StepReason · object[]"},"collected":{"oneOf":[{"type":"object","title":"CollectedRecord","description":"What the step collected, once it was answered.","required":["answer","outputs"],"properties":{"answer":{"additionalProperties":true,"type":"object","title":"Answer","description":"The user's current answer, shaped per step type. A step whose answer is the files it gathered reports them as its documents rather than here, so this is empty on a step that asks for nothing else.","isRequired":true,"uniqueKey":"steps.items.[INDEX].collected.oneOf.0.answer","typeLabel":"Answer · object"},"outputs":{"additionalProperties":true,"type":"object","title":"Outputs","description":"What the step's checks established. A step that passed publishes these for the steps after it to read, so a later check can be made against them.\n\nA step that failed reports what its checks found here as well, and nothing after it reads those. A cross-check that failed on one name still scored the others, and this is where those scores are.\n\nWhere a step published its outputs, every field its type publishes is here, and one with nothing to say is null, so read those for a value rather than for the key. Two cases carry no key at all: a step that published nothing reports an empty object, and a form step publishes the fields your workflow declares, so one the user left blank is absent.\n\nWhere your workflow is set up to reach you in names or shapes of your own, these keys are those names, and a field your workflow converts arrives as its expression yields it. Every other value keeps the place and the shape it is published in. This reference describes the fields as the system publishes them, so they are what to translate from, and `output_transformations` on the workflow states the translation. It reaches this object alone: `answer` comes back in the shape you send it.","isRequired":true,"uniqueKey":"steps.items.[INDEX].collected.oneOf.0.outputs","typeLabel":"Outputs · object"}},"isRequired":true,"uniqueKey":"steps.items.[INDEX].collected.oneOf.0","typeLabel":"CollectedRecord · object"},{"type":"null","description":"What the step collected, once it was answered.","isRequired":true,"uniqueKey":"steps.items.[INDEX].collected.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"steps.items.[INDEX].collected","typeLabel":"CollectedRecord · object | null"},"documents":{"items":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"The document's id, used to download it.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"slot":{"type":"string","title":"Slot","description":"The named slot the file sits in.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].slot","typeLabel":"string"},"kind":{"type":"string","title":"Kind","description":"Which of its slot's kinds the file was provided as. Every slot names at least one, and `intake.slots` names them for every step answered over this API. A file a check fetched carries the kind of document the source returned, and a photo taken on the person's own screens carries the kind of photo it was asked for.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].kind","typeLabel":"string"},"label":{"oneOf":[{"type":"string","title":"Label","description":"This document's name in your own system, where your workflow gives it one: the label of the kind it was provided as, or, for a file a step fetched, the label the step's settings give the document it was fetched as. The same label on the same document across branches is how you find it without knowing which branch ran.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].label.oneOf.0","typeLabel":"string"},{"type":"null","title":"Label","description":"This document's name in your own system, where your workflow gives it one: the label of the kind it was provided as, or, for a file a step fetched, the label the step's settings give the document it was fetched as. The same label on the same document across branches is how you find it without knowing which branch ran.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].label.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].label","typeLabel":"string | null"},"filename":{"type":"string","title":"Filename","description":"The original filename.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].filename","typeLabel":"string"},"content_type":{"type":"string","title":"Content Type","description":"The file's MIME type.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].content_type","typeLabel":"string"},"size_bytes":{"type":"integer","title":"Size Bytes","description":"The file's size in bytes.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].size_bytes","typeLabel":"integer"},"sha256":{"type":"string","title":"Sha256","description":"The SHA-256 hash of the file's contents.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].sha256","typeLabel":"string"},"received_at":{"type":"string","format":"date-time","title":"Received At","description":"When the file was received.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents.items.[INDEX].received_at","typeLabel":"string\u003cdate-time>"}},"type":"object","required":["id","slot","kind","label","filename","content_type","size_bytes","sha256","received_at"],"title":"DocumentRecord","description":"One file on the record, whether the user uploaded it or the step fetched it on their behalf.","uniqueKey":"steps.items.[INDEX].documents.items.[INDEX]","typeLabel":"DocumentRecord · object"},"type":"array","title":"Documents","description":"The files this step holds, oldest first.","isRequired":true,"uniqueKey":"steps.items.[INDEX].documents","typeLabel":"DocumentRecord · object[]"}},"type":"object","required":["key","title","label","type","required","state","reasons","gaps","collected","documents"],"title":"StepRecord","description":"One step of the workflow that this user was asked for.","uniqueKey":"steps.items.[INDEX]","typeLabel":"StepRecord · object"},"type":"array","title":"Steps","description":"The steps this journey has not ruled out, in journey order. A workflow presents the steps that apply to whoever is being verified, so a journey that took one branch reports that branch and not the others; `progress.not_applicable` says how many are missing from here, and reading the verification with `include_not_applicable` shows them.\n\nA step is only missing once something has ruled it out. One whose place in the journey turns on a value an earlier step has yet to publish is here, reading `undetermined`, so a verification you have just created reports every step its workflow declares and they resolve into the other states as it goes on.","isRequired":true,"uniqueKey":"steps","typeLabel":"StepRecord · object[]"}},"type":"object","required":["id","mode","status","workflow_key","version","mobile","email","reference_user_id","inviter","context","return_url","journey_url","created_at","run_requested_at","submitted_at","completed_at","signed_at","offered_contracts","review","reopen","cancelled_at","gated_at","gated_by_step","failed_at","expired_at","expired_by","last_activity_at","expires_after_days","expires_at","invitation","reminder","acknowledgement","callback","completion_callback","credits_consumed","resets","progress","steps"],"title":"VerificationRecord","description":"The whole record of one verification; safe to poll.","uniqueKey":"","typeLabel":"VerificationRecord · object"},"examples":{"Example":{"title":"Example","value":{"id":"3f2504e0-4f89-41d3-9a0c-0305e82c3301","mode":"hosted","status":"completed","workflow_key":"merchant-onboarding","version":2,"mobile":"+919876543210","email":"rahul.mehta@example.com","reference_user_id":"merchant-42","inviter":"Priya Nair","context":{"channel":"field-sales","state":"MH"},"return_url":"https://yourapp.com/kyc/done","journey_url":"https://verify.privue.ai/acme/merchant-onboarding/3f2504e0-4f89-41d3-9a0c-0305e82c3301","created_at":"2026-08-10T14:02:11","last_activity_at":"2026-08-10T14:41:06","expires_after_days":30,"expires_at":"2026-09-09T14:41:06","run_requested_at":null,"submitted_at":"2026-08-10T14:41:06","completed_at":"2026-08-10T14:41:09","signed_at":null,"offered_contracts":[],"review":{"verdict":"approved","at":"2026-08-10T16:05:12","by":{"actor":"api-key","key_id":"key_3ZmQ7pW2xR8tLnVy"},"reason":"GSTIN active and the PAN matches the director","callback":{"status":"delivered","settled_at":"2026-08-10T16:05:14","reason":null}},"reopen":null,"cancelled_at":null,"gated_at":null,"gated_by_step":null,"failed_at":null,"expired_at":null,"expired_by":null,"invitation":{"requested_at":"2026-08-10T14:02:11","email":{"status":"sent","sent_at":"2026-08-10T14:02:14","message_id":"4ef9a1c2-7b3d-4e8a-9c51-2d6f0b8e3a71"},"sms":{"status":"not-sent","sent_at":null,"message_id":null}},"reminder":null,"acknowledgement":null,"callback":{"status":"delivered","settled_at":"2026-08-10T14:41:09","reason":null},"completion_callback":null,"credits_consumed":1,"resets":0,"progress":{"total":12,"passed":10,"failed":0,"awaiting":0,"enriching":0,"error":0,"declined":1,"not_supplied":0,"undetermined":0,"not_applicable":1},"steps":[{"key":"contact","title":"Before we start","label":"contact_email","type":"form","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"email":"owner@acmetraders.in"},"outputs":{"email":"owner@acmetraders.in"}},"documents":[]},{"key":"gst","title":"GST certificate","label":"tax_registration","type":"gst-certificate","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"gstin":"27AABCA1234F1Z5","legal_name":"ACME TRADERS PRIVATE LIMITED","trade_name":"Acme Traders","registration_status":"Active","registration_date":"2020-01-13","business_constitution":"Private Limited Company","taxpayer_type":"Regular","e_invoice_mandated":true,"aggregate_turnover":"Slab: Rs. 5 Cr. to 25 Cr.","authorized_signatories":["Rahul Mehta","Priya Mehta"],"nature_of_business_activities":["Wholesale Business","Warehouse / Depot"],"business_details":{"goods_details":[{"goods_description":"Filtering machinery","hsn_code":"84212190"}],"service_details":[]},"filings":[{"return_type":"GSTR1","financial_year":"2026-2027","tax_period":"May","status":"Filed","filing_date":"2026-06-04","mode_of_filing":"ONLINE"},{"return_type":"GSTR3B","financial_year":"2026-2027","tax_period":"May","status":"Filed","filing_date":"2026-06-23","mode_of_filing":"ONLINE"},{"return_type":"GSTR9","financial_year":"2024-2025","tax_period":"Annual","status":"Filed","filing_date":"2025-12-18","mode_of_filing":"ONLINE"}],"business_pan":"AABCA1234F","sole_proprietor_pan":null,"addresses":[{"address":"12 Industrial Estate, Pune, Maharashtra 411026","tag":"Principal Business Address"}],"primary_business_address":{"street":"12 Industrial Estate","city":"Pune","state":"Maharashtra","country":"India","postal_code":"411026"},"other_business_address":null,"names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"Legal Name"},{"name":"Acme Traders","tag":"Trade Name"}],"key_managerial_persons":[{"name":"Rahul Mehta","designation":"Managing Director"},{"name":"Priya Mehta","designation":"Director"}],"business_email":"accounts@acmetraders.in","business_mobile":"9820011223"}},"documents":[{"id":"bb9909b4-44e4-414a-af82-bad690d434ed","slot":"gst-certificate","kind":"gst-certificate","label":"gst_certificate","filename":"gst-certificate.pdf","content_type":"application/pdf","size_bytes":182044,"sha256":"63f90f32e899197edb4f038322e354f3c6b907602a44a58a0ae52b40a2cd9811","received_at":"2026-08-10T14:21:58"}]},{"key":"pan","title":"PAN card","label":"entity_pan","type":"pan-card","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"pan":"AABCA1234F","name":"ACME TRADERS PRIVATE LIMITED","date_of_birth_or_incorporation":"2011-06-14","card_document_id":"4fd79a54-a8a7-4e07-b902-a2e75af3e467","status":"valid","aadhaar_seeded":null,"names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"PAN Holder"}]}},"documents":[{"id":"4fd79a54-a8a7-4e07-b902-a2e75af3e467","slot":"pan-card","kind":"pan-card","label":"entity_pan","filename":"pan-card.jpg","content_type":"image/jpeg","size_bytes":92412,"sha256":"42b7e28cf9a26dcef6e275de42f7516ad36ee86c6aa45888821a81217e62a670","received_at":"2026-08-10T14:09:12"}]},{"key":"identity","title":"Identity","label":null,"type":"digilocker","required":false,"state":"passed","reasons":[],"gaps":[{"code":"digilocker-document-missing","message":"Your pan document was not shared from DigiLocker.","details":{"doc_type":"pan"}}],"collected":{"answer":{"session_id":"e0d4a1f6-7c93-4b28-9f51-3a8c62d0be47"},"outputs":{"name":"Rahul Mehta","names":[{"name":"Rahul Mehta","tag":"DigiLocker Holder"}],"email":"rahul.mehta@example.com","mobile":"9876543210","date_of_birth":"14/03/1986","gender":"Male","pan":null,"masked_aadhaar":"XXXXXXXX4172","photo_document_id":"c48b2e57-9a10-4d3f-b6e8-1f7c9a05d24b"}},"documents":[{"id":"7e5c1a90-2f83-4a12-9c47-6d0b58e2af31","slot":"digilocker-docs","kind":"aadhaar","label":"aadhaar_card","filename":"aadhaar.pdf","content_type":"application/pdf","size_bytes":148820,"sha256":"e17c4b8025d9a63f04e7b158c92da370465f8b1e07c3d924a6b508f1c73e2d05","received_at":"2026-08-10T14:14:37"},{"id":"c48b2e57-9a10-4d3f-b6e8-1f7c9a05d24b","slot":"digilocker-docs","kind":"photo","label":"holder_photo","filename":"photo.jpg","content_type":"image/jpeg","size_bytes":18734,"sha256":"b8043f7e1c592a6d0e34b871f5c9d206a47e3b9018c5d62faf7b04e39c1a5867","received_at":"2026-08-10T14:14:38"}]},{"key":"selfie","title":"Selfie","label":null,"type":"selfie","required":false,"state":"declined","reasons":[],"gaps":[],"collected":null,"documents":[]},{"key":"bank","title":"Bank account","label":"payout_account","type":"bank-account","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"source":"typed","account_number":"50100234567890","ifsc":"HDFC0001234"},"outputs":{"source":"typed","account_number":"50100234567890","ifsc":"HDFC0001234","registered_name":"ACME TRADERS PRIVATE LIMITED","names":[{"name":"ACME TRADERS PRIVATE LIMITED","tag":"Bank Account Holder"}],"bank_name":null,"branch":null,"micr":null}},"documents":[]},{"key":"trade-licence","title":"Trade licence","label":null,"type":"documents","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{}},"documents":[{"id":"2a6f8d13-4c95-4e7b-8f30-5b1e6c9a7d02","slot":"licence","kind":"licence","label":"trade_licence","filename":"shop-establishment-licence.pdf","content_type":"application/pdf","size_bytes":221893,"sha256":"0a9c7f1b5e2d48a6c3f07b91d4e85a2c6f13b8074de92a5c1f6b3e08d7a24c95","received_at":"2026-08-10T14:27:03"},{"id":"8b31c4e6-7d92-4a58-b0f1-3e6d2c94a17f","slot":"lease","kind":"lease","label":"lease_agreement","filename":"lease-agreement.pdf","content_type":"application/pdf","size_bytes":654201,"sha256":"7d4e1c08b3a95f26d07e4b1a8c53f902e6b7d148a05c39f2b8e6104d7c3a95e2","received_at":"2026-08-10T14:28:44"}]},{"key":"premises","title":"Premises photos","label":null,"type":"premises-photos","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"locations":{"5c9e07b2-8f41-4d6a-9e35-2b7a1c8f60d4":{"latitude":18.629812,"longitude":73.813104,"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","place_id":"ChIJhTQr8kW_wjsR1nQm2eF0hQY"},"e6142f8a-3b57-4c90-8d21-9a4f7e0b53c6":{"latitude":18.629774,"longitude":73.813251,"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","place_id":"ChIJhTQr8kW_wjsR1nQm2eF0hQY"}}},"outputs":{"addresses":["12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India"]}},"documents":[{"id":"5c9e07b2-8f41-4d6a-9e35-2b7a1c8f60d4","slot":"storefront","kind":"storefront","label":"storefront_photo","filename":"storefront.jpg","content_type":"image/jpeg","size_bytes":1442310,"sha256":"c1f5b70e934a26d8071c4be95f3a20d7e846b1c95023f7ad6b48e01c9f735a26","received_at":"2026-08-10T14:33:19"},{"id":"e6142f8a-3b57-4c90-8d21-9a4f7e0b53c6","slot":"interior","kind":"interior","label":"interior_photo","filename":"interior.jpg","content_type":"image/jpeg","size_bytes":1180955,"sha256":"9b0d3e64a17c58f2e40b96d7c85a13f0246e9b7d1c503a8f6b2e74d09c1a5837","received_at":"2026-08-10T14:34:02"}]},{"key":"premises-proof","title":"Proof of premises","label":null,"type":"address-proof","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{},"outputs":{"verified_tags":["Principal Business Address"],"unverified_tags":[],"readings":[{"slot":"utility-bill","kind":"electricity","label":"electricity_bill","premises_address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","verified_tags":["Principal Business Address"]}]}},"documents":[{"id":"0c73de91-6a24-4b8f-95d0-7e41b25c8a63","slot":"utility-bill","kind":"electricity","label":"electricity_bill","filename":"electricity-bill.pdf","content_type":"application/pdf","size_bytes":96410,"sha256":"3e8b1d95c072a46f8b5309e7d41c6a28b90f7e35c1d84620a7f3b9e05d268c14","received_at":"2026-08-10T14:36:50"}]},{"key":"addresses","title":"Tag the addresses","label":null,"type":"address-tagging","required":false,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"addresses":[]},"outputs":{"addresses":[{"address":"12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India","tag":"Principal Business Address"}],"recognised":["12, Industrial Estate Rd, Bhosari, Pune, Maharashtra 411026, India"]}},"documents":[]},{"key":"review","title":"Review","label":"applicant_signoff","type":"review","required":true,"state":"passed","reasons":[],"gaps":[],"collected":{"answer":{"declarations":[{"key":"terms-of-service","label":"tos_consent","title":"Terms of service","content":"I accept the [terms of service](https://yourapp.com/terms) and the [privacy policy](https://yourapp.com/privacy).","accepted":true},{"key":"information-true","label":"truth_declaration","title":null,"content":"Everything I have provided is true and correct to the best of my knowledge.","accepted":true},{"key":"contact-on-whatsapp","label":"whatsapp_optin","title":null,"content":"You may contact me about this application on WhatsApp.","accepted":false}]},"outputs":{}},"documents":[]}]}}},"exampleType":"examples"}},"exampleType":"examples"},"cffd8014-a2c1-4228-81c7-d16ea4a801d8":{"description":"The API key is missing, malformed, or revoked.\n\nThe code is `unauthenticated`.","content":{"application/json":{"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"example":{"code":"unauthenticated","detail":"Missing or malformed Authorization header"},"examples":{"Example":{"title":"Example","value":{"code":"unauthenticated","detail":"Missing or malformed Authorization header"}}},"exampleType":"examples"}},"exampleType":"examples"},"e1efd179-2c4b-4617-9942-4e20b513a0a9":{"description":"The workflow belongs to the other environment. An API key is for `uat` or for `production` and reaches only that environment's workflows. Or the key is valid but not enrolled for verifications, or not set up for exactly one of `uat` and `production`, in which case ask us to reissue it.\n\nThe code is one of `environment-mismatch` or `client-not-enrolled`.","content":{"application/json":{"example":{"code":"environment-mismatch","detail":"workflow 'merchant-onboarding' is production and this request is for uat"},"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"code":"environment-mismatch","detail":"workflow 'merchant-onboarding' is production and this request is for uat"}}},"exampleType":"examples"}},"exampleType":"examples"},"12fe8b69-0706-4899-9a1e-f62d6406b81d":{"description":"No verification with that id exists on your account.\n\nThe code is `verification-not-found`.","content":{"application/json":{"example":{"code":"verification-not-found","detail":"no verification 3f2504e0-4f89-41d3-9a0c-0305e82c3301 for this client"},"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"code":"verification-not-found","detail":"no verification 3f2504e0-4f89-41d3-9a0c-0305e82c3301 for this client"}}},"exampleType":"examples"}},"exampleType":"examples"},"808f424a-dadc-40da-94bb-136b567a6576":{"description":"Only a hosted verification whose run has finished can be approved or rejected, and only while what it collected is kept: one still running or reopened, one that ended any other way, or one you supplied yourself has no finished run of the person's to review, and an expired one's data is deleted. Or the run already has the verdict asked for, and the review standing on it is not the one sent.\n\nThe code is one of `verification-not-reviewable` or `verification-expired`.","content":{"application/json":{"example":{"code":"verification-not-reviewable","detail":"the verification is already approved"},"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"code":"verification-not-reviewable","detail":"the verification is already approved"}}},"exampleType":"examples"}},"exampleType":"examples"},"07a9a97c-dbc6-4c17-9b4e-b5c28915a5e0":{"description":"An identifier in the path is not in the shape it takes, the reason is empty or longer than 500 characters, or the body has a field other than `reason`.\n\nThe code is `request-invalid`.","content":{"application/json":{"example":{"code":"request-invalid","detail":"reason: String should have at most 500 characters"},"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"code":"request-invalid","detail":"reason: String should have at most 500 characters"}}},"exampleType":"examples"}},"exampleType":"examples"},"3c7828d7-3f9f-424b-91b4-65389c7d8c07":{"description":"The API key is rate limited. Retry after a pause.\n\nThe code is `rate-limited`.","content":{"application/json":{"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"example":{"code":"rate-limited","detail":"Unauthorized: RATE_LIMITED"},"examples":{"Example":{"title":"Example","value":{"code":"rate-limited","detail":"Unauthorized: RATE_LIMITED"}}},"exampleType":"examples"}},"exampleType":"examples"},"bbe9129f-cae1-429a-82c8-3c6d52ab2c8e":{"description":"The workflow's output transformations cannot convert a value this verification holds, so its record cannot be read. What this call did to the verification stands. Contact us to have the workflow's configuration put right.\n\nThe code is `workflow-misconfigured`.","content":{"application/json":{"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"example":{"code":"workflow-misconfigured","detail":"the output transformation for gst-certificate at 'registration_date' could not be applied"},"examples":{"Example":{"title":"Example","value":{"code":"workflow-misconfigured","detail":"the output transformation for gst-certificate at 'registration_date' could not be applied"}}},"exampleType":"examples"}},"exampleType":"examples"},"6979f333-ace0-4848-891a-59075f84c5cb":{"description":"API keys could not be checked right now. Retry.\n\nThe code is `auth-unavailable`.","content":{"application/json":{"schema":{"properties":{"code":{"type":"string","enum":["unauthenticated","client-not-enrolled","rate-limited","auth-unavailable","environment-mismatch","request-invalid","body-unreadable","page-cursor-invalid","window-invalid","request-too-large","not-found","method-not-allowed","internal-error","workflow-not-found","workflow-version-not-found","workflow-not-runnable","workflow-not-walkable","workflow-misconfigured","context-incomplete","context-value-invalid","mobile-required","email-required","journey-fields-refused","return-url-not-allowed","reference-taken","verification-not-found","verification-not-open","verification-expired","invitations-off","invitation-throttled","not-invited","nothing-to-remind","reminder-throttled","verification-not-reviewable","verification-not-reopenable","contracts-out","verification-not-signable","run-in-progress","credits-exhausted","resets-exhausted","contract-credits-exhausted","live-limit-reached","step-not-found","step-not-reopenable","step-not-ready","step-invalid","document-not-found","document-not-stored","document-too-large","document-type-not-allowed","document-locked","contract-workflow-not-found","contract-not-found","contract-not-sendable","contract-refused","contract-settled","contract-not-remindable","contract-files-not-kept","contract-withdrawal-pending","esign-unavailable","identity-unavailable"],"title":"ErrorCode","description":"What went wrong. Branch on this rather than on the status code, which several causes share, and never on `detail`.\n\nTreat a code you do not recognise as the status it arrived at: codes are added as new causes become reachable, and an existing one never changes meaning.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","title":"Detail","description":"What went wrong, in words, naming the workflow, verification, step or field at fault where one is. Written for a person reading a log rather than for code to read, so it is not stable and nothing should be matched against it.","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"type":"object","required":["code","detail"],"title":"ErrorResponse","description":"The envelope every failure is answered in.","uniqueKey":"","typeLabel":"ErrorResponse · object"},"example":{"code":"auth-unavailable","detail":"Auth provider unavailable"},"examples":{"Example":{"title":"Example","value":{"code":"auth-unavailable","detail":"Auth provider unavailable"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"f042be41-4e94-4bd6-ac82-4cc3e42998ab":{"HTTPBearer":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"HTTPBearer"}}},"servers":{"769bbc79-30ef-42bd-8aa0-055f5837e0c5":{"url":"https://api.verify.privue.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"HTTPBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"HTTPBearer","name":"Authorization"}],"title":"HTTPBearer"}]},"originalFileLocation":"verification/api-reference/openapi.json"},"subdomain":"privue","siteName":"Privue","title":"Approve a verification - Privue","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T10:36:45.009Z","originalFileLocation":"api-reference/verifications/approve-a-verification.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Approve a hosted verification whose run has finished, with your reason if you give one. A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended. On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run\u0026#x27;s contracts. A run already holding a signed contract of each completes as it is approved. Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification\u0026#x27;s history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Privue\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Approve a verification - Privue\">\u003cmeta data-mint-head property=\"og:description\" content=\"Approve a hosted verification whose run has finished, with your reason if you give one. A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended. On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run\u0026#x27;s contracts. A run already holding a signed contract of each completes as it is approved. Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification\u0026#x27;s history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Privue\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.privue.ai/api-reference/verifications/approve-a-verification\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://privue.mintlify.site/_mintlify/api/og/v2?division=Verifications\u0026amp;title=Approve+a+verification\u0026amp;description=Approve+a+hosted+verification+whose+run+has+finished%2C+with+your+reason+if+you+give+one.%0A%0AA+run+waiting+in+%60pending-approval%60+completes%2C+and+so+does+a+rejected+o\u0026amp;theme=b052c943c94a6b375d9291a0\u0026amp;signature=2ecbaeacabc15675abbcd2d06148837e73c2a4c3cc3c629c9483cadf094aa24b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Approve a verification - Privue\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Approve a hosted verification whose run has finished, with your reason if you give one. A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended. On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run\u0026#x27;s contracts. A run already holding a signed contract of each completes as it is approved. Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification\u0026#x27;s history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://privue.mintlify.site/_mintlify/api/og/v2?division=Verifications\u0026amp;title=Approve+a+verification\u0026amp;description=Approve+a+hosted+verification+whose+run+has+finished%2C+with+your+reason+if+you+give+one.%0A%0AA+run+waiting+in+%60pending-approval%60+completes%2C+and+so+does+a+rejected+o\u0026amp;theme=b052c943c94a6b375d9291a0\u0026amp;signature=2ecbaeacabc15675abbcd2d06148837e73c2a4c3cc3c629c9483cadf094aa24b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/privue/DLYdCt-xcGBx9eyl/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Privue\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3027A0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.privue.ai/api-reference/verifications/approve-a-verification\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/verifications/approve-a-verification.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.privue.ai/#organization\",\"name\":\"Privue\",\"url\":\"https://docs.privue.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://privue.ai/privue-logo.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.privue.ai#website\",\"name\":\"Privue\",\"url\":\"https://docs.privue.ai\",\"publisher\":{\"@id\":\"https://docs.privue.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification#webpage\",\"url\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification\",\"name\":\"Approve a verification\",\"description\":\"Approve a hosted verification whose run has finished, with your reason if you give one. A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended. On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run's contracts. A run already holding a signed contract of each completes as it is approved. Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\",\"dateModified\":\"2026-11-13T10:36:45.009Z\",\"isPartOf\":{\"@id\":\"https://docs.privue.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Verifications\",\"item\":\"https://docs.privue.ai/api-reference/verifications/create-a-verification\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Approve a verification\",\"item\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification#apireference\",\"headline\":\"Approve a verification\",\"name\":\"Approve a verification\",\"description\":\"Approve a hosted verification whose run has finished, with your reason if you give one. A run waiting in pending-approval completes, and so does a rejected one. Its review reads approved, saying when, which of your callers approved it and why. The approval is posted to your callback endpoint as verification.approved, whichever of your callers gave it, and review.callback says how that callback ended. On a version that offers contracts, an approved run reads pending-signature rather than completed, until a contract of each one in its offered_contracts is signed on it, which completes it: send each from the run's contracts. A run already holding a signed contract of each completes as it is approved. Only a hosted verification is reviewed, and only once its run has finished, until it expires. A run already approved is refused with 409, one its workflow approved as it finished included, except that the approval standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.\",\"url\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification\",\"mainEntityOfPage\":{\"@id\":\"https://docs.privue.ai/api-reference/verifications/approve-a-verification#webpage\"},\"dateModified\":\"2026-11-13T10:36:45.009Z\",\"publisher\":{\"@id\":\"https://docs.privue.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.privue.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Privue\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Privue\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/verifications/approve-a-verification.md","siteName":"Privue","nav":{"global":null,"products":[{"product":"Verify with Privue","icon":"user-check","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/verification/introduction"}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/verification/recipes/hosted"}]},{"tab":"API reference","groups":[{"group":"Workflows","pages":[{"title":"List your workflows","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /workflows","href":"/api-reference/workflows/list-your-workflows"},{"title":"Read a workflow","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /workflows/{workflow_key}","href":"/api-reference/workflows/read-a-workflow"},{"title":"List a workflow's versions","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /workflows/{workflow_key}/versions","href":"/api-reference/workflows/list-a-workflows-versions"},{"title":"Read a version of a workflow","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /workflows/{workflow_key}/versions/{version}","href":"/api-reference/workflows/read-a-version-of-a-workflow"}]},{"group":"Results","pages":[{"title":"List verifications","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications","href":"/api-reference/results/list-verifications"},{"title":"Count your verifications","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/summary","href":"/api-reference/results/count-your-verifications"},{"title":"Count your gate stops","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/gate-stops","href":"/api-reference/results/count-your-gate-stops"},{"title":"Read a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/{verification_id}","href":"/api-reference/results/read-a-verification"},{"title":"Link to documents","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/documents/download","href":"/api-reference/results/link-to-documents"}]},{"group":"Verifications","pages":[{"title":"Create a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications","href":"/api-reference/verifications/create-a-verification"},{"title":"Cancel a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/cancel","href":"/api-reference/verifications/cancel-a-verification"},{"title":"Reset a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/reset","href":"/api-reference/verifications/reset-a-verification"},{"title":"Send the invitation","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/invitation","href":"/api-reference/verifications/send-the-invitation"},{"title":"Remind the user","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/reminder","href":"/api-reference/verifications/remind-the-user"},{"title":"Purge a verification","description":"Delete everything the subject provided, now, and close the record for audit.\n\nThe same ending the retention window brings, at the moment you ask for it: every answer, every value read off a document, every file, the mobile number and the email, the context you supplied and the sign-in identity are deleted, and the record reads `expired` from then on with `expired_by` saying you asked. What survives is what survives any expiry: the ids, your reference, the timestamps, the callback outcomes, your verdict and who gave it without its reason, and each step's final state and reason codes.\n\nIts contracts go the same way. Any still with its signers is withdrawn first, and each keeps what it was and how it ended, while its values, your note, its signers and its signed files are deleted. While a signer is part way through signing a contract cannot be taken back, so the purge is refused whole with `409` and nothing is deleted.\n\nAllowed from any status. An open journey closes under its user, and a run still checking a submission still being checked stops. Purging an already expired verification is a no-op. A purged verification cannot be reopened; verify the subject again by starting a new verification under the same `reference_user_id`.","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/purge","href":"/api-reference/verifications/purge-a-verification"},{"title":"Approve a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/approve","href":"/api-reference/verifications/approve-a-verification"},{"title":"Reject a verification","description":"Reject a hosted verification whose run has finished, with your reason if you give one.\n\nThe run reads `rejected`, and its `review` says when, which of your callers rejected it and why. A run waiting in `pending-approval` and one that completed can both be rejected, and so can one waiting on its contracts' signatures, and a rejected one approved later. The rejection is posted to your callback endpoint as `verification.rejected`, whichever of your callers gave it, and `review.callback` says how that callback ended. What the run collected stays readable until it expires.\n\nEvery contract still with its signers is withdrawn, which waits while a signer is part way through signing; a contract its signers finish first stays signed. Each is called back as it ends.\n\nOnly a hosted verification is reviewed, and only once its run has finished, until it expires. A run already rejected is refused with `409`, except that the rejection standing on it sent again, for the same reason, is answered with the record as it is. The verification's history on the dashboard keeps every review. A reset clears the review along with the run it was given on.","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/reject","href":"/api-reference/verifications/reject-a-verification"},{"title":"Reopen a verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/reopen","href":"/api-reference/verifications/reopen-a-verification"}]},{"group":"Instant workflows","pages":[{"title":"Run an instant verification","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/instant","href":"/api-reference/instant-workflows/run-an-instant-verification"}]},{"group":"Hosted workflows","pages":[{"title":"Hand off a signed-in user","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/handoff","href":"/api-reference/hosted-workflows/hand-off-a-signed-in-user"}]},{"group":"Staged workflows","pages":[{"title":"Upload a document","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/documents","href":"/api-reference/staged-workflows/upload-a-document"},{"title":"Withdraw a document","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json delete /verifications/{verification_id}/documents/{document_id}","href":"/api-reference/staged-workflows/withdraw-a-document"},{"title":"Run the checks","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/run","href":"/api-reference/staged-workflows/run-the-checks"}]},{"group":"Contracts","pages":[{"title":"List contracts","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /contracts","href":"/api-reference/contracts/list-contracts"},{"title":"List a verification's contracts","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/{verification_id}/contracts","href":"/api-reference/contracts/list-a-verifications-contracts"},{"title":"Send a contract","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/contracts","href":"/api-reference/contracts/send-a-contract"},{"title":"Preview a contract","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/{verification_id}/contracts/preview","href":"/api-reference/contracts/preview-a-contract"},{"title":"Read a contract","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json get /verifications/{verification_id}/contracts/{contract_id}","href":"/api-reference/contracts/read-a-contract"},{"title":"Remind a contract's signers","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/contracts/{contract_id}/remind","href":"/api-reference/contracts/remind-a-contracts-signers"},{"title":"Withdraw a contract","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/contracts/{contract_id}/withdraw","href":"/api-reference/contracts/withdraw-a-contract"},{"title":"Link to a contract's files","deprecated":null,"version":null,"openapi":"/verification/api-reference/openapi.json post /verifications/{verification_id}/contracts/{contract_id}/download","href":"/api-reference/contracts/link-to-a-contracts-files"}]}]}]},{"product":"API Suite","icon":"plug","pages":[{"title":"API Suite","href":"/suite/introduction"}]},{"product":"Data with Privue","icon":"database","pages":[{"title":"Data with Privue","href":"/datahub/introduction"}]}]},"basePath":"","title":"Approve a verification - Privue","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}