Secret API key, created in the dashboard under Settings → API. Send it as Authorization: Bearer rk_secret_… from your server only. Publishable keys (pk_live_…) are for the native SDKs and reach the capture endpoints alone. An unknown key returns 401.
Body
application/json
Send steps for guided photos, or max_captures for N anonymous photos (default 1) — never both. Everything else is optional.
Body for POST /v1/verifications. All fields optional — sensible defaults: max_captures: 1, expires_in_seconds: 3600. Every photo gets the screen and AI checks; an audit adds found-online; describing the photo (expected_object, context) turns the context check on. Capture quantity comes as EITHER max_captures (N anonymous captures) OR steps (guided slots with key/description/min/max) — never both. context is what the analysis pipeline cross-references against the capture; metadata is opaque pass-through echoed back on every webhook event.
Full plain-text message shown after submitting content. HTML, markdown and variables are not interpreted. Omit on create or send null on PATCH to use the default.
Brand profile shown on the capture page. Absent = your default brand.
Required string length: 2 - 40
Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
Response
Verification minted. Returns the canonical wire shape including the capture_url the tenant sends to the end-user.
A verification as your API key sees it. verdict appears once analysis finished; object_match, location_match and condition appear when you asked for them and the check ran. Your metadata is not echoed back: keep the id.
Lifecycle state. pending → first capture flips to partially_captured → analysis sets the verdict and transitions to completed. Terminal: completed, expired, failed. abandoned is a side-branch off pending/partially_captured, reported by the capture screen via POST /v1/verifications/:token/progress when the end user leaves before finishing — NOT terminal: a later capture resurrects the row to partially_captured like any other.
Whether the photo was taken at expected_location. verified within GPS tolerance; no_match somewhere else; ungeocoded when the address or the fix could not be resolved; rejected when the device reported a mock location.
Object-check result. Present when an object check was requested globally or on an image step. With step-only configuration the status is the worst step result and expected_object is omitted. Independent of the fraud verdict.
Object-check results keyed by image step. Missing capture verdicts yield inconclusive; otherwise each value is the worst context result for the step, ignoring not_applicable when live evidence exists.
Condition assessment. Present only when the verification was created with condition_aspects — the free-form tenant-defined aspect names (any language, any domain). score is the one-decimal average of aspect scores; label buckets it (>=7.5 good, >=5 fair, else poor). Independent of the fraud verdict.
Analysis of a video-step clip, sampled at one frame per second and run through the same checks a photo gets. Written asynchronously after capture — poll or use webhooks; absent until the worker has run.
An earlier verification of yours whose photo matches this one. method: "phash": the perceptual hashes are within threshold (Hamming distance 0–64; 0 is bit-identical) — a re-upload. method: "embedding": the hashes differ but the photos are the same scene by embedding (cosine) and a geometric check confirmed it (inliers) — a screenshot or a crop. Present only when a match was found. It does not change rial: a legitimate re-submission and a recycled photo look the same — your reviewer decides.
Integrity seal over the verification record including answers. Present only when answers exist and sealing is on (seal !== false). The hash proves the stored answers have not changed — it does NOT claim they are true or sensor-attested; answers_provenance carries that distinction explicitly.
Option 1
Option 2
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rial","description":"Verify that a photo is real. Developer documentation for the Rial API, CLI and native SDKs.","colors":{"primary":"#1C1C1A","light":"#5EDCF0","dark":"#1C1C1A"},"logo":{"light":"https://mintcdn.com/rial-84ef3b7b/3BGl3crqe81CslFi/logo/rial-imagotype-light.svg?fit=max\u0026auto=format\u0026n=3BGl3crqe81CslFi\u0026q=85\u0026s=f87832b55472581c748e69fe09932a5e","dark":"https://mintcdn.com/rial-84ef3b7b/3BGl3crqe81CslFi/logo/rial-imagotype-dark.svg?fit=max\u0026auto=format\u0026n=3BGl3crqe81CslFi\u0026q=85\u0026s=7dbd4de118c7a30f86c49c048ef15f37","href":"https://www.rial.io"},"favicon":"https://mintcdn.com/rial-84ef3b7b/3BGl3crqe81CslFi/rial-isotype.svg?fit=max\u0026auto=format\u0026n=3BGl3crqe81CslFi\u0026q=85\u0026s=5a40aaa4a3032861397f006e49333f38","appearance":{"default":"dark","strict":false},"navbar":{"links":[{"icon":"message","href":"mailto:developers@rial.io","label":"Support"},{"href":"https://app.rial.io","label":"Dashboard"}],"primary":{"type":"button","label":"Get an API key","href":"https://app.rial.io/settings"}},"footer":{"links":[{"header":"RIAL","items":[{"label":"rial.io","href":"https://www.rial.io"},{"label":"Dashboard","href":"https://app.rial.io"},{"label":"Status","href":"https://status.rial.io"}]}]},"seo":{"metatags":{"og:description":"Verify that a photo is real. API, CLI and native SDKs."}},"fonts":{"heading":{"family":"Cormorant Garamond","weight":500},"body":{"family":"Inter","weight":400}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"integrations":{"posthog":{"apiKey":"phc_qkjPtdAahxszndgmyviMBWN8cvWk4rzqmG6cpw2oaQWh","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rial-84ef3b7b","hasAudioNarration":false,"actualSubdomain":"rial-84ef3b7b","customDomains":["docs.rial.io"],"gitSource":{"type":"github","owner":"rial-ventures-inc","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad68bc1d7bd5bf675578900","collectionId":"59a449d7-c502-4638-a5af-557b10c0eb11","liveDeploymentHistoryId":"6ad68bc1d7bd5bf675578900","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad68bc1d7bd5bf675578900","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API reference","count":24},{"language":"default","tag":"Templates","count":9},{"language":"default","tag":"Get started","count":8},{"language":"default","tag":"SDKs \u0026 tools","count":7},{"language":"default","tag":"Verifications","count":7},{"language":"default","tag":"Start","count":6},{"language":"default","tag":"Databases","count":4},{"language":"default","tag":"Backend","count":3},{"language":"default","tag":"Mobile capture","count":3},{"language":"default","tag":"Credits","count":3}]},"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":"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":"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":"llms-txt-v2","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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* vietnamese */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxAD1XJ7.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxED1XJ7.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gx8D1Q.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxAD1XJ7.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxED1XJ7.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gx8D1Q.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxAD1XJ7.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gxED1XJ7.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Chivo Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/chivomono/v11/mFT0WbgRxKvF_Z5eQMO9gx8D1Q.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--rial-black:#000000;--rial-carbon:#1c1c1a;--rial-silver:#c9c9c9;--rial-parchment:#f1eae3;--rial-porcelain:#fffdf7;--rial-aqua:#5edcf0;--rial-aqua-ink:#0f9db3;--rial-lemon:#efecbc;--rial-ice:#b6f2e3;--rial-rule:#e4e3e0;--rial-mono:'Chivo Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace}h1,h2,h3,h4,h5,h6{font-family:'Inter',ui-sans-serif,system-ui,sans-serif;font-weight:600;text-transform:none;letter-spacing:0}.prose h2:not([data-component-part]),h1#page-title{font-family:'Cormorant Garamond',Georgia,serif;font-weight:500;text-transform:uppercase;letter-spacing:.01em;line-height:1.1}h1#page-title{font-size:2.75rem}.prose h2:not([data-component-part]){font-size:1.9rem}code,kbd,pre,th{font-family:var(--rial-mono)}.rial-eyebrow,th{font-size:11px;font-weight:500;letter-spacing:.12em;text-transform:uppercase}.rial-eyebrow{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--rial-mono);font-size:12px;font-weight:400;letter-spacing:.18em;color:var(--rial-carbon)}.dark .rial-eyebrow,.dark .rial-lede{color:var(--rial-porcelain)}.rial-eyebrow::before{content:'';width:9px;height:9px;border-radius:2px;background:var(--rial-aqua)}.rial-lede{font-size:1.25rem;line-height:1.5;margin:.75rem 0 1.5rem;color:var(--rial-carbon)}.card{border-radius:12px}.card h2,[data-component-part=card-title]{font-family:'Inter',ui-sans-serif,system-ui,sans-serif;font-weight:600;font-size:1.05rem;text-transform:none;letter-spacing:0;line-height:1.35}.card:hover{border-color:var(--rial-aqua-ink)}.dark .card:hover{border-color:var(--rial-aqua)}"}],"page":{"pagePath":"api-reference/verifications/create-a-verification","slug":"/api-reference/verifications/create-a-verification","pageMetadata":{"title":"Create a verification","description":"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/verifications","href":"/api-reference/verifications/create-a-verification","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.\"\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":"dark","config":{},"pageMetadata":{"title":"Create a verification","description":"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/verifications","href":"/api-reference/verifications/create-a-verification","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Verifications"],"summary":"Create a verification","description":"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.","security":["6b513bd2-34bd-4229-b12b-afd86506accf"],"requestBody":"9797a8c4-d8a1-4316-b1f1-79b094df8eb3","responses":{"201":"4e3d8c0b-fa62-4f03-8da1-e0973da1336c","400":"cf6f9e59-af01-403f-8623-723f9718993f","401":"a54f3a53-8357-4073-8218-437ce992af48","402":"d5da03ee-9251-4f22-83b5-67ced68346f2","429":"8c6e7234-70be-405f-8ef7-f481c7b95174"},"method":"post","type":"path","servers":["36fbb192-4b2b-49e9-a768-331bb5be3efb"],"path":"/v1/verifications","baseUrlOptions":["https://api.rial.io"],"title":"Create a verification","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"description":"Send `steps` for guided photos, or `max_captures` for N anonymous photos (default 1) — never both. Everything else is optional.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Body for `POST /v1/verifications`. All fields optional — sensible defaults: `max_captures: 1`, `expires_in_seconds: 3600`. Every photo gets the screen and AI checks; an audit adds found-online; describing the photo (`expected_object`, `context`) turns the context check on. Capture quantity comes as EITHER `max_captures` (N anonymous captures) OR `steps` (guided slots with key/description/min/max) — never both. `context` is what the analysis pipeline cross-references against the capture; `metadata` is opaque pass-through echoed back on every webhook event.","properties":{"max_captures":{"type":"integer","minimum":1,"maximum":20,"description":"How many anonymous photos to ask for. Use this or `steps`, never both. Default 1.","uniqueKey":"max_captures","typeLabel":"integer"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","required":["key","type"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.key","typeLabel":"string"},"type":{"type":"string","enum":["image"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.0.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.0.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.0.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.0.when","typeLabel":"object"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.0.description","typeLabel":"string"},"min":{"type":"integer","minimum":0,"default":1,"description":"Minimum photos. 0 makes the step optional. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.0.min","typeLabel":"integer"},"max":{"type":"integer","minimum":1,"default":1,"description":"Maximum photos. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.0.max","typeLabel":"integer"},"allow_upload":{"type":"boolean","description":"Also allow picking a file from the gallery instead of the camera.","uniqueKey":"steps.items.[INDEX].oneOf.0.allow_upload","typeLabel":"boolean"},"accept":{"type":"array","items":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/heic","image/heif"],"uniqueKey":"steps.items.[INDEX].oneOf.0.accept.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"description":"Accepted media types.","uniqueKey":"steps.items.[INDEX].oneOf.0.accept","typeLabel":"enum\u003cstring>[]"},"max_size_bytes":{"type":"integer","minimum":1,"maximum":26214400,"description":"Maximum size per photo, in bytes.","uniqueKey":"steps.items.[INDEX].oneOf.0.max_size_bytes","typeLabel":"integer"},"expected_object":{"type":"string","minLength":1,"maxLength":200,"description":"What must appear in this photo. Overrides the verification-level value.","uniqueKey":"steps.items.[INDEX].oneOf.0.expected_object","typeLabel":"string"},"condition_aspects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"steps.items.[INDEX].oneOf.0.condition_aspects.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":6,"description":"Aspects to score on this photo. Overrides the verification-level value.","uniqueKey":"steps.items.[INDEX].oneOf.0.condition_aspects","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["key","type"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.key","typeLabel":"string"},"type":{"type":"string","enum":["text"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.1.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.1.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.1.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.1.when","typeLabel":"object"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.1.description","typeLabel":"string"},"required":{"type":"boolean","default":true,"description":"Default true.","uniqueKey":"steps.items.[INDEX].oneOf.1.required","typeLabel":"boolean"},"validation":{"type":"object","properties":{"min_length":{"type":"integer","minimum":0,"maximum":2000,"uniqueKey":"steps.items.[INDEX].oneOf.1.validation.min_length","typeLabel":"integer"},"max_length":{"type":"integer","minimum":1,"maximum":2000,"uniqueKey":"steps.items.[INDEX].oneOf.1.validation.max_length","typeLabel":"integer"},"format":{"type":"string","enum":["free_text","numeric_id","alphanumeric_id","email"],"default":"free_text","uniqueKey":"steps.items.[INDEX].oneOf.1.validation.format","typeLabel":"enum\u003cstring>"}},"default":{"format":"free_text"},"additionalProperties":false,"description":"Length and format rules: `free_text`, `numeric_id`, `alphanumeric_id` or `email`.","uniqueKey":"steps.items.[INDEX].oneOf.1.validation","typeLabel":"object"},"variant":{"type":"string","enum":["short","long"],"description":"`short` (one line) or `long`.","uniqueKey":"steps.items.[INDEX].oneOf.1.variant","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["key","type"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.key","typeLabel":"string"},"type":{"type":"string","enum":["upload"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.2.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.2.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.2.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.2.when","typeLabel":"object"},"input":{"type":"string","enum":["signature"],"description":"`signature` shows a signature pad instead of a file picker.","uniqueKey":"steps.items.[INDEX].oneOf.2.input","typeLabel":"enum\u003cstring>"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.2.description","typeLabel":"string"},"min":{"type":"integer","minimum":0,"default":1,"description":"Minimum files. 0 makes the step optional. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.2.min","typeLabel":"integer"},"max":{"type":"integer","minimum":1,"default":1,"description":"Maximum files. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.2.max","typeLabel":"integer"},"accept":{"type":"array","items":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/heic","image/heif"],"uniqueKey":"steps.items.[INDEX].oneOf.2.accept.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"default":["image/jpeg","image/png","image/webp","image/heic","image/heif"],"description":"Accepted media types.","uniqueKey":"steps.items.[INDEX].oneOf.2.accept","typeLabel":"enum\u003cstring>[]"},"max_size_bytes":{"type":"integer","minimum":1,"maximum":26214400,"default":10485760,"description":"Maximum size per file, in bytes.","uniqueKey":"steps.items.[INDEX].oneOf.2.max_size_bytes","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","required":["key","type"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.key","typeLabel":"string"},"type":{"type":"string","enum":["video"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.3.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.3.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.3.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.3.when","typeLabel":"object"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.3.description","typeLabel":"string"},"min":{"type":"integer","minimum":0,"default":1,"description":"Minimum clips. 0 makes the step optional. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.3.min","typeLabel":"integer"},"max":{"type":"integer","minimum":1,"default":1,"description":"Maximum clips. Default 1.","uniqueKey":"steps.items.[INDEX].oneOf.3.max","typeLabel":"integer"},"expected_object":{"type":"string","minLength":1,"maxLength":200,"description":"What the clip must show. Every sampled frame is checked against it and the clip reads as object match / no match by persistence.","uniqueKey":"steps.items.[INDEX].oneOf.3.expected_object","typeLabel":"string"},"expected_scene":{"type":"string","minLength":1,"maxLength":200,"description":"What the clip as a whole must show, in order (\"a walk around the car with the hood open, ending on the engine bay\"). Judged once per clip over a contact sheet of its frames; the clip reads as scene match / no match with the reason. Absent: no scene check.","uniqueKey":"steps.items.[INDEX].oneOf.3.expected_scene","typeLabel":"string"},"audio":{"type":"boolean","default":false,"description":"Record the microphone with the clip. The person is asked for microphone access on this step; a refusal still records the video, without sound. Default false.","uniqueKey":"steps.items.[INDEX].oneOf.3.audio","typeLabel":"boolean"},"condition_aspects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"steps.items.[INDEX].oneOf.3.condition_aspects.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":6,"description":"Aspects to score on the clip. Judged once per clip over a contact sheet of its frames, like `expected_scene`; scored 0..10 with a reason each. Overrides the verification-level value.","uniqueKey":"steps.items.[INDEX].oneOf.3.condition_aspects","typeLabel":"string[]"},"max_duration_sec":{"type":"integer","minimum":1,"maximum":60,"default":60,"description":"Maximum length of each clip, in seconds.","uniqueKey":"steps.items.[INDEX].oneOf.3.max_duration_sec","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","required":["key","type","options"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.key","typeLabel":"string"},"type":{"type":"string","enum":["choice"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.options.items.[INDEX].key","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":500,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.options.items.[INDEX].label","typeLabel":"string"}},"required":["key","label"],"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.4.options.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":50,"description":"Options to pick from, each with `key` and `label`.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.options","typeLabel":"object[]"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.4.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.4.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.4.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.4.when","typeLabel":"object"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.4.description","typeLabel":"string"},"required":{"type":"boolean","default":true,"description":"Default true.","uniqueKey":"steps.items.[INDEX].oneOf.4.required","typeLabel":"boolean"},"multiple":{"type":"boolean","default":false,"description":"Allow picking more than one option.","uniqueKey":"steps.items.[INDEX].oneOf.4.multiple","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.4","typeLabel":"object"},{"type":"object","required":["key","type"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","description":"Stable id of the step. Its answer or photos come back under this key.","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.key","typeLabel":"string"},"type":{"type":"string","enum":["address"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.type","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":200,"description":"Visible title of the step.","uniqueKey":"steps.items.[INDEX].oneOf.5.label","typeLabel":"string"},"screen":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.screen.key","typeLabel":"string"},"title":{"type":"string","minLength":1,"maxLength":120,"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.screen.title","typeLabel":"string"},"description":{"type":"string","maxLength":8000,"uniqueKey":"steps.items.[INDEX].oneOf.5.screen.description","typeLabel":"string"}},"required":["key","title"],"additionalProperties":false,"description":"Groups consecutive steps on one screen: `key` and `title` shared by the group.","uniqueKey":"steps.items.[INDEX].oneOf.5.screen","typeLabel":"object"},"when":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.when.key","typeLabel":"string"},"value":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9_-]*$","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.when.value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"description":"Show this step only when the step `key` was answered with `value`.","uniqueKey":"steps.items.[INDEX].oneOf.5.when","typeLabel":"object"},"country":{"type":"string","enum":["BR"],"description":"`BR` shows Brazilian address fields.","uniqueKey":"steps.items.[INDEX].oneOf.5.country","typeLabel":"enum\u003cstring>"},"description":{"type":"string","maxLength":500,"default":"","description":"Instruction shown to the person.","uniqueKey":"steps.items.[INDEX].oneOf.5.description","typeLabel":"string"},"required":{"type":"boolean","default":true,"description":"Default true.","uniqueKey":"steps.items.[INDEX].oneOf.5.required","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.5","typeLabel":"object"}],"uniqueKey":"steps.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"Guided steps in order: photos, text questions, uploads, choices, addresses. Use this or `max_captures`.","uniqueKey":"steps","typeLabel":"object[]"},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":86400,"default":3600,"description":"How long the capture link stays open, in seconds. Default 3600 (one hour), max 86400.","uniqueKey":"expires_in_seconds","typeLabel":"integer"},"seal":{"type":"boolean","default":true,"description":"Stamp the delivered photos with a C2PA seal. Default true.","uniqueKey":"seal","typeLabel":"boolean"},"mode":{"type":"string","enum":["verification","audit"],"description":"`verification` (photo taken live, default) or `audit` (a file that already exists, uploaded through the API).","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"context":{"type":"object","properties":{"kind":{"type":"string","minLength":1,"maxLength":64,"isRequired":true,"uniqueKey":"context.kind","typeLabel":"string"},"summary":{"type":"string","minLength":1,"maxLength":500,"isRequired":true,"uniqueKey":"context.summary","typeLabel":"string"},"attributes":{"type":"object","additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"context.attributes.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"context.attributes.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"context.attributes.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"context.attributes.additionalProperties","typeLabel":"string | number | boolean"},"uniqueKey":"context.attributes","typeLabel":"object"}},"required":["kind","summary"],"description":"What the photo is supposed to show, for the `context` check: `kind` names the thing, `summary` describes it in one line.","uniqueKey":"context","typeLabel":"object"},"webhook_url":{"type":"string","format":"uri","description":"HTTPS URL that receives `verification.created` and `verification.completed`.","uniqueKey":"webhook_url","typeLabel":"string\u003curi>"},"notify_email":{"oneOf":[{"type":"string","maxLength":254,"format":"email","description":"Email that receives the result. `null` opts this verification out; absent uses your account default.","uniqueKey":"notify_email.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","maxLength":254,"format":"email","description":"Email that receives the result. `null` opts this verification out; absent uses your account default.","uniqueKey":"notify_email.oneOf.1","typeLabel":"null"}],"uniqueKey":"notify_email","typeLabel":"string\u003cemail> | null"},"report_language":{"type":"string","enum":["es","en"],"uniqueKey":"report_language","typeLabel":"enum\u003cstring>"},"notify_subject_template":{"oneOf":[{"type":"string","minLength":1,"description":"Subject of the result email. `{variable}` placeholders allowed.","uniqueKey":"notify_subject_template.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Subject of the result email. `{variable}` placeholders allowed.","uniqueKey":"notify_subject_template.oneOf.1","typeLabel":"null"}],"uniqueKey":"notify_subject_template","typeLabel":"string | null"},"notify_body_template":{"oneOf":[{"type":"string","minLength":1,"description":"Body of the result email. `{variable}` placeholders allowed.","uniqueKey":"notify_body_template.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Body of the result email. `{variable}` placeholders allowed.","uniqueKey":"notify_body_template.oneOf.1","typeLabel":"null"}],"uniqueKey":"notify_body_template","typeLabel":"string | null"},"completion_message":{"oneOf":[{"type":"string","minLength":1,"maxLength":2000,"description":"Full plain-text message shown after submitting content. HTML, markdown and variables are not interpreted. Omit on create or send null on PATCH to use the default.","uniqueKey":"completion_message.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"maxLength":2000,"description":"Full plain-text message shown after submitting content. HTML, markdown and variables are not interpreted. Omit on create or send null on PATCH to use the default.","uniqueKey":"completion_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"completion_message","typeLabel":"string | null"},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"description":"Your own key/value strings, returned with every result and webhook. Example: `{ \"claim_id\": \"CLM-9912\" }`.","uniqueKey":"metadata","typeLabel":"object"},"requires_location":{"type":"boolean","description":"Require a GPS fix on the first photo without comparing it to an address.","uniqueKey":"requires_location","typeLabel":"boolean"},"security_level":{"type":"string","enum":["none","low","medium","high"],"description":"How much the phone asks of the person at each shot, from `low` to `high`; `none` runs no capture checks. Absent: `none`.","uniqueKey":"security_level","typeLabel":"enum\u003cstring>"},"expected_location":{"type":"string","minLength":1,"maxLength":300,"description":"Street address the photo must be taken at. Turns on `location_match`.","uniqueKey":"expected_location","typeLabel":"string"},"expected_object":{"type":"string","minLength":1,"maxLength":200,"description":"What must appear in the photo, e.g. `\"car\"`. Turns on `object_match`.","uniqueKey":"expected_object","typeLabel":"string"},"condition_aspects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"condition_aspects.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":6,"description":"One to six aspects to score from 0 to 10, e.g. `[\"paint\", \"tires\"]`. Turns on `condition`.","uniqueKey":"condition_aspects","typeLabel":"string[]"},"expected_info":{"type":"object","properties":{"source":{"type":"string","enum":["individual","csv"],"default":"individual","uniqueKey":"expected_info.source","typeLabel":"enum\u003cstring>"},"shared":{"type":"object","properties":{"expected_location":{"type":"string","minLength":1,"maxLength":300,"uniqueKey":"expected_info.shared.expected_location","typeLabel":"string"},"expected_object":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"expected_info.shared.expected_object","typeLabel":"string"},"condition_aspects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"expected_info.shared.condition_aspects.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":6,"uniqueKey":"expected_info.shared.condition_aspects","typeLabel":"string[]"},"ocr_type":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"expected_info.shared.ocr_type","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"expected_info.shared","typeLabel":"object"},"subject":{"type":"object","properties":{"expected_location":{"type":"string","minLength":1,"maxLength":300,"uniqueKey":"expected_info.subject.expected_location","typeLabel":"string"},"expected_object":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"expected_info.subject.expected_object","typeLabel":"string"},"condition_aspects":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"expected_info.subject.condition_aspects.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":6,"uniqueKey":"expected_info.subject.condition_aspects","typeLabel":"string[]"},"ocr_type":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"expected_info.subject.ocr_type","typeLabel":"string"},"asset_ref":{"type":"string","minLength":1,"maxLength":120,"uniqueKey":"expected_info.subject.asset_ref","typeLabel":"string"},"person":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"uniqueKey":"expected_info.subject.person.name","typeLabel":"string"},"email":{"type":"string","maxLength":254,"format":"email","uniqueKey":"expected_info.subject.person.email","typeLabel":"string\u003cemail>"},"phone_e164":{"type":"string","pattern":"^\\+[1-9]\\d{6,14}$","uniqueKey":"expected_info.subject.person.phone_e164","typeLabel":"string"},"external_ref":{"type":"string","minLength":1,"maxLength":120,"uniqueKey":"expected_info.subject.person.external_ref","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"expected_info.subject.person","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"expected_info.subject","typeLabel":"object"}},"additionalProperties":false,"description":"Structured alternative to `expected_location`, `expected_object` and `condition_aspects`. Send one form or the other.","uniqueKey":"expected_info","typeLabel":"object"},"brand_slug":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Brand profile shown on the capture page. Absent = your default brand.","uniqueKey":"brand_slug","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"max_captures":3,"expires_in_seconds":3600,"context":{"kind":"damage_claim","summary":"Toyota Corolla front bumper"},"webhook_url":"https://api.acmeinsurance.com/rial/webhooks","metadata":{"claim_id":"CLM-9912"}},"examples":{"Example":{"title":"Example","value":{"max_captures":3,"expires_in_seconds":3600,"context":{"kind":"damage_claim","summary":"Toyota Corolla front bumper"},"webhook_url":"https://api.acmeinsurance.com/rial/webhooks","metadata":{"claim_id":"CLM-9912"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"4e3d8c0b-fa62-4f03-8da1-e0973da1336c":{"description":"Verification minted. Returns the canonical wire shape including the `capture_url` the tenant sends to the end-user.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","pattern":"^vfy_[0-9A-HJKMNP-TV-Z]{26}$","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"status":{"type":"string","enum":["pending","partially_captured","completed","expired","failed","abandoned"],"description":"Lifecycle state. `pending` → first capture flips to `partially_captured` → analysis sets the verdict and transitions to `completed`. Terminal: `completed`, `expired`, `failed`. `abandoned` is a side-branch off `pending`/`partially_captured`, reported by the capture screen via `POST /v1/verifications/:token/progress` when the end user leaves before finishing — NOT terminal: a later capture resurrects the row to `partially_captured` like any other.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"capture_url":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"capture_url","typeLabel":"string\u003curi>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"expires_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time>"},"captures_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"captures_count","typeLabel":"integer"},"verdict":{"oneOf":[{"type":"object","description":"Verdict of a live capture. Branch on `rial`; `signals` says why when it is false, and `unavailable` when a check could not be completed.","required":["rial","signals"],"properties":{"rial":{"type":"boolean","description":"True when the dashboard verdict is verified and no exposed fraud check tripped.","isRequired":true,"uniqueKey":"verdict.oneOf.0.rial","typeLabel":"boolean"},"signals":{"type":"array","items":{"type":"string","enum":["screen_detected","ai_detected","found_online"],"description":"A check that tripped: `screen_detected` (photo of a screen), `ai_detected` (AI-generated), `found_online` (already published).","uniqueKey":"verdict.oneOf.0.signals.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The checks that tripped.","isRequired":true,"uniqueKey":"verdict.oneOf.0.signals","typeLabel":"enum\u003cstring>[]"},"reverse_search":{"type":"object","properties":{"state":{"type":"string","enum":["pending","review","no_match","inconclusive","expired"],"isRequired":true,"uniqueKey":"verdict.oneOf.0.reverse_search.state","typeLabel":"enum\u003cstring>"},"sources":{"type":"array","items":{"type":"string","format":"uri","uniqueKey":"verdict.oneOf.0.reverse_search.sources.items.[INDEX]","typeLabel":"string\u003curi>"},"isRequired":true,"uniqueKey":"verdict.oneOf.0.reverse_search.sources","typeLabel":"string\u003curi>[]"}},"required":["state","sources"],"description":"Secondary reverse-search state. Similarity candidates require review; they are not confirmed fraud findings.","uniqueKey":"verdict.oneOf.0.reverse_search","typeLabel":"object"},"unavailable":{"type":"array","items":{"type":"string","enum":["screen","ai","reverse","context"],"uniqueKey":"verdict.oneOf.0.unavailable.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"description":"Checks that could not be completed because the detector never answered after every retry: `screen` (photo of a screen), `ai` (AI-generated), `reverse` (already online), `context`, `depth`. Present only when non-empty; `rial` is then false — the photo was not fully checked, which is not the same as a finding.","uniqueKey":"verdict.oneOf.0.unavailable","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"verdict.oneOf.0","typeLabel":"object"},{"type":"object","description":"Verdict of an audit (`mode: \"audit\"`, a file that already existed). Includes the Rial/no Rial result and the checks that tripped. This is an analysis result, not proof of live capture.","required":["rial","signals"],"properties":{"rial":{"type":"boolean","description":"Rial/no Rial result of the audit, matching the dashboard.","isRequired":true,"uniqueKey":"verdict.oneOf.1.rial","typeLabel":"boolean"},"signals":{"type":"array","items":{"oneOf":[{"type":"object","description":"A check that tripped on an audited file.","required":["type"],"properties":{"type":{"type":"string","enum":["screen_detected"],"isRequired":true,"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A check that tripped on an audited file.","required":["type"],"properties":{"type":{"type":"string","enum":["ai_detected"],"isRequired":true,"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"confidence":{"type":"number","minimum":0,"maximum":1,"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.1.confidence","typeLabel":"number"}},"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"A check that tripped on an audited file.","required":["type"],"properties":{"type":{"type":"string","enum":["found_online"],"isRequired":true,"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"verdict.oneOf.1.signals.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"verdict.oneOf.1.signals","typeLabel":"object[]"},"reverse_search":{"type":"object","properties":{"state":{"type":"string","enum":["pending","review","no_match","inconclusive","expired"],"isRequired":true,"uniqueKey":"verdict.oneOf.1.reverse_search.state","typeLabel":"enum\u003cstring>"},"sources":{"type":"array","items":{"type":"string","format":"uri","uniqueKey":"verdict.oneOf.1.reverse_search.sources.items.[INDEX]","typeLabel":"string\u003curi>"},"isRequired":true,"uniqueKey":"verdict.oneOf.1.reverse_search.sources","typeLabel":"string\u003curi>[]"}},"required":["state","sources"],"description":"Secondary reverse-search state. Similarity candidates require review; they are not confirmed fraud findings.","uniqueKey":"verdict.oneOf.1.reverse_search","typeLabel":"object"},"unavailable":{"type":"array","items":{"type":"string","enum":["screen","ai","reverse","context"],"uniqueKey":"verdict.oneOf.1.unavailable.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"description":"Checks that could not be completed because the detector never answered after every retry: `screen` (photo of a screen), `ai` (AI-generated), `reverse` (already online), `context`, `depth`. Present only when non-empty; `rial` is then false — the photo was not fully checked, which is not the same as a finding.","uniqueKey":"verdict.oneOf.1.unavailable","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"verdict.oneOf.1","typeLabel":"object"}],"uniqueKey":"verdict","typeLabel":"object"},"location":{"type":"object","properties":{"lat":{"type":"number","isRequired":true,"uniqueKey":"location.lat","typeLabel":"number"},"lng":{"type":"number","isRequired":true,"uniqueKey":"location.lng","typeLabel":"number"},"accuracy_m":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"location.accuracy_m","typeLabel":"number"},"derived_from":{"type":"string","enum":["exif","live","last_known_session","last_known_system","last_known_persisted"],"uniqueKey":"location.derived_from","typeLabel":"enum\u003cstring>"},"age_ms":{"type":"integer","minimum":0,"uniqueKey":"location.age_ms","typeLabel":"integer"},"place":{"type":"string","uniqueKey":"location.place","typeLabel":"string"}},"required":["lat","lng","accuracy_m"],"description":"Where the photo was taken, from the device. Absent for uploaded files and when the device reported no fix.","uniqueKey":"location","typeLabel":"object"},"location_match":{"type":"object","properties":{"status":{"type":"string","enum":["verified","no_match","ungeocoded","rejected","not_applicable"],"isRequired":true,"uniqueKey":"location_match.status","typeLabel":"enum\u003cstring>"},"expected_location":{"type":"string","uniqueKey":"location_match.expected_location","typeLabel":"string"},"observed_location":{"type":"string","uniqueKey":"location_match.observed_location","typeLabel":"string"},"expected_point":{"type":"object","properties":{"lat":{"type":"number","isRequired":true,"uniqueKey":"location_match.expected_point.lat","typeLabel":"number"},"lng":{"type":"number","isRequired":true,"uniqueKey":"location_match.expected_point.lng","typeLabel":"number"}},"required":["lat","lng"],"uniqueKey":"location_match.expected_point","typeLabel":"object"},"observed_point":{"type":"object","properties":{"lat":{"type":"number","isRequired":true,"uniqueKey":"location_match.observed_point.lat","typeLabel":"number"},"lng":{"type":"number","isRequired":true,"uniqueKey":"location_match.observed_point.lng","typeLabel":"number"}},"required":["lat","lng"],"uniqueKey":"location_match.observed_point","typeLabel":"object"},"distance_m":{"type":"number","minimum":0,"uniqueKey":"location_match.distance_m","typeLabel":"number"},"threshold_m":{"type":"number","minimum":0,"uniqueKey":"location_match.threshold_m","typeLabel":"number"},"gps_accuracy_m":{"type":"number","minimum":0,"uniqueKey":"location_match.gps_accuracy_m","typeLabel":"number"},"geocode_ref":{"type":"string","uniqueKey":"location_match.geocode_ref","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"location_match.reason","typeLabel":"string"}},"required":["status"],"description":"Whether the photo was taken at `expected_location`. `verified` within GPS tolerance; `no_match` somewhere else; `ungeocoded` when the address or the fix could not be resolved; `rejected` when the device reported a mock location.","uniqueKey":"location_match","typeLabel":"object"},"object_match":{"type":"object","properties":{"status":{"type":"string","enum":["match","mismatch","inconclusive"],"isRequired":true,"uniqueKey":"object_match.status","typeLabel":"enum\u003cstring>"},"expected_object":{"type":"string","uniqueKey":"object_match.expected_object","typeLabel":"string"}},"required":["status"],"description":"Object-check result. Present when an object check was requested globally or on an image step. With step-only configuration the status is the worst step result and expected_object is omitted. Independent of the fraud verdict.","uniqueKey":"object_match","typeLabel":"object"},"object_matches":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["match","mismatch","inconclusive"],"isRequired":true,"uniqueKey":"object_matches.additionalProperties.status","typeLabel":"enum\u003cstring>"},"expected_object":{"type":"string","isRequired":true,"uniqueKey":"object_matches.additionalProperties.expected_object","typeLabel":"string"}},"required":["status","expected_object"],"description":"Object-check result for one image step, including its expected object.","uniqueKey":"object_matches.additionalProperties","typeLabel":"object"},"description":"Object-check results keyed by image step. Missing capture verdicts yield inconclusive; otherwise each value is the worst context result for the step, ignoring not_applicable when live evidence exists.","uniqueKey":"object_matches","typeLabel":"object"},"condition":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"condition.score","typeLabel":"number"},"label":{"type":"string","enum":["good","fair","poor"],"isRequired":true,"uniqueKey":"condition.label","typeLabel":"enum\u003cstring>"},"aspects":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"condition.aspects.items.[INDEX].name","typeLabel":"string"},"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"condition.aspects.items.[INDEX].score","typeLabel":"number"},"reasoning":{"type":"string","isRequired":true,"uniqueKey":"condition.aspects.items.[INDEX].reasoning","typeLabel":"string"}},"required":["name","score","reasoning"],"description":"One scored aspect of the condition assessment. `name` echoes the free-form tenant-defined aspect from `condition_aspects` verbatim — any language, any domain, no fixed vocabulary. `score` is 0..10 with one decimal; `reasoning` is a one-or-two-sentence visual justification.","uniqueKey":"condition.aspects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"condition.aspects","typeLabel":"object[]"},"provenance":{"type":"object","properties":{"model":{"type":"string","isRequired":true,"uniqueKey":"condition.provenance.model","typeLabel":"string"},"prompt":{"type":"string","isRequired":true,"uniqueKey":"condition.provenance.prompt","typeLabel":"string"},"instructions_sha256":{"type":"string","minLength":64,"maxLength":64,"uniqueKey":"condition.provenance.instructions_sha256","typeLabel":"string"}},"required":["model","prompt"],"description":"What produced this assessment: the model, the prompt (`id@version`) and, when your organization's condition instructions applied, their SHA-256 — so a result stays tied to the guidance and model of its day. Absent on assessments written before this field existed.","uniqueKey":"condition.provenance","typeLabel":"object"},"steps":{"type":"object","additionalProperties":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"condition.steps.additionalProperties.score","typeLabel":"number"},"label":{"type":"string","enum":["good","fair","poor"],"isRequired":true,"uniqueKey":"condition.steps.additionalProperties.label","typeLabel":"enum\u003cstring>"},"aspects":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"condition.steps.additionalProperties.aspects.items.[INDEX].name","typeLabel":"string"},"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"condition.steps.additionalProperties.aspects.items.[INDEX].score","typeLabel":"number"},"reasoning":{"type":"string","isRequired":true,"uniqueKey":"condition.steps.additionalProperties.aspects.items.[INDEX].reasoning","typeLabel":"string"}},"required":["name","score","reasoning"],"description":"One scored aspect of the condition assessment. `name` echoes the free-form tenant-defined aspect from `condition_aspects` verbatim — any language, any domain, no fixed vocabulary. `score` is 0..10 with one decimal; `reasoning` is a one-or-two-sentence visual justification.","uniqueKey":"condition.steps.additionalProperties.aspects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"condition.steps.additionalProperties.aspects","typeLabel":"object[]"},"provenance":{"type":"object","properties":{"model":{"type":"string","isRequired":true,"uniqueKey":"condition.steps.additionalProperties.provenance.model","typeLabel":"string"},"prompt":{"type":"string","isRequired":true,"uniqueKey":"condition.steps.additionalProperties.provenance.prompt","typeLabel":"string"},"instructions_sha256":{"type":"string","minLength":64,"maxLength":64,"uniqueKey":"condition.steps.additionalProperties.provenance.instructions_sha256","typeLabel":"string"}},"required":["model","prompt"],"description":"What produced this assessment: the model, the prompt (`id@version`) and, when your organization's condition instructions applied, their SHA-256 — so a result stays tied to the guidance and model of its day. Absent on assessments written before this field existed.","uniqueKey":"condition.steps.additionalProperties.provenance","typeLabel":"object"}},"required":["score","label","aspects"],"description":"Condition assessment. Present only when the verification was created with `condition_aspects` — the free-form tenant-defined aspect names (any language, any domain). `score` is the one-decimal average of aspect scores; `label` buckets it (>=7.5 good, >=5 fair, else poor). Independent of the fraud verdict.","uniqueKey":"condition.steps.additionalProperties","typeLabel":"object"},"description":"Condition results keyed by photo step. Each uses only that step’s photos and its rubric, falling back to the shared rubric. The aggregate averages all assessed aspect scores.","uniqueKey":"condition.steps","typeLabel":"object"}},"required":["score","label","aspects"],"description":"Condition assessment. Present only when the verification was created with `condition_aspects` — the free-form tenant-defined aspect names (any language, any domain). `score` is the one-decimal average of aspect scores; `label` buckets it (>=7.5 good, >=5 fair, else poor). Independent of the fraud verdict.","uniqueKey":"condition","typeLabel":"object"},"video_analysis":{"type":"object","properties":{"capture_id":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.capture_id","typeLabel":"string"},"frames_extracted":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.frames_extracted","typeLabel":"integer"},"frames_analyzed":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.frames_analyzed","typeLabel":"integer"},"signals":{"type":"object","properties":{"screen":{"type":"object","properties":{"detected":{"type":"boolean","isRequired":true,"uniqueKey":"video_analysis.signals.screen.detected","typeLabel":"boolean"},"frames_evaluated":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.screen.frames_evaluated","typeLabel":"integer"},"flagged_ratio":{"type":"number","minimum":0,"maximum":1,"isRequired":true,"uniqueKey":"video_analysis.signals.screen.flagged_ratio","typeLabel":"number"},"longest_run_ms":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.screen.longest_run_ms","typeLabel":"integer"},"flagged_at_ms":{"type":"array","items":{"type":"integer","minimum":0,"uniqueKey":"video_analysis.signals.screen.flagged_at_ms.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"video_analysis.signals.screen.flagged_at_ms","typeLabel":"integer[]"}},"required":["detected","frames_evaluated","flagged_ratio","longest_run_ms","flagged_at_ms"],"description":"How one check behaved across the sampled frames. `detected` is true when it tripped on at least half of `frames_evaluated` or on three consecutive frames; isolated trips are listed in `flagged_at_ms` without deciding.","uniqueKey":"video_analysis.signals.screen","typeLabel":"object"},"ai":{"type":"object","properties":{"detected":{"type":"boolean","isRequired":true,"uniqueKey":"video_analysis.signals.ai.detected","typeLabel":"boolean"},"frames_evaluated":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.ai.frames_evaluated","typeLabel":"integer"},"flagged_ratio":{"type":"number","minimum":0,"maximum":1,"isRequired":true,"uniqueKey":"video_analysis.signals.ai.flagged_ratio","typeLabel":"number"},"longest_run_ms":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.ai.longest_run_ms","typeLabel":"integer"},"flagged_at_ms":{"type":"array","items":{"type":"integer","minimum":0,"uniqueKey":"video_analysis.signals.ai.flagged_at_ms.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"video_analysis.signals.ai.flagged_at_ms","typeLabel":"integer[]"}},"required":["detected","frames_evaluated","flagged_ratio","longest_run_ms","flagged_at_ms"],"description":"How one check behaved across the sampled frames. `detected` is true when it tripped on at least half of `frames_evaluated` or on three consecutive frames; isolated trips are listed in `flagged_at_ms` without deciding.","uniqueKey":"video_analysis.signals.ai","typeLabel":"object"},"reverse":{"type":"object","properties":{"detected":{"type":"boolean","isRequired":true,"uniqueKey":"video_analysis.signals.reverse.detected","typeLabel":"boolean"},"frames_evaluated":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.reverse.frames_evaluated","typeLabel":"integer"},"flagged_ratio":{"type":"number","minimum":0,"maximum":1,"isRequired":true,"uniqueKey":"video_analysis.signals.reverse.flagged_ratio","typeLabel":"number"},"longest_run_ms":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.reverse.longest_run_ms","typeLabel":"integer"},"flagged_at_ms":{"type":"array","items":{"type":"integer","minimum":0,"uniqueKey":"video_analysis.signals.reverse.flagged_at_ms.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"video_analysis.signals.reverse.flagged_at_ms","typeLabel":"integer[]"}},"required":["detected","frames_evaluated","flagged_ratio","longest_run_ms","flagged_at_ms"],"description":"How one check behaved across the sampled frames. `detected` is true when it tripped on at least half of `frames_evaluated` or on three consecutive frames; isolated trips are listed in `flagged_at_ms` without deciding.","uniqueKey":"video_analysis.signals.reverse","typeLabel":"object"},"context":{"type":"object","properties":{"detected":{"type":"boolean","isRequired":true,"uniqueKey":"video_analysis.signals.context.detected","typeLabel":"boolean"},"frames_evaluated":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.context.frames_evaluated","typeLabel":"integer"},"flagged_ratio":{"type":"number","minimum":0,"maximum":1,"isRequired":true,"uniqueKey":"video_analysis.signals.context.flagged_ratio","typeLabel":"number"},"longest_run_ms":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"video_analysis.signals.context.longest_run_ms","typeLabel":"integer"},"flagged_at_ms":{"type":"array","items":{"type":"integer","minimum":0,"uniqueKey":"video_analysis.signals.context.flagged_at_ms.items.[INDEX]","typeLabel":"integer"},"isRequired":true,"uniqueKey":"video_analysis.signals.context.flagged_at_ms","typeLabel":"integer[]"}},"required":["detected","frames_evaluated","flagged_ratio","longest_run_ms","flagged_at_ms"],"description":"How one check behaved across the sampled frames. `detected` is true when it tripped on at least half of `frames_evaluated` or on three consecutive frames; isolated trips are listed in `flagged_at_ms` without deciding.","uniqueKey":"video_analysis.signals.context","typeLabel":"object"}},"description":"One entry per check that ran on the clip; a missing entry was not evaluated, never clean.","isRequired":true,"uniqueKey":"video_analysis.signals","typeLabel":"object"},"analyzed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"video_analysis.analyzed_at","typeLabel":"string\u003cdate-time>"},"scene":{"type":"object","properties":{"verdict":{"type":"string","enum":["match","mismatch","inconclusive"],"isRequired":true,"uniqueKey":"video_analysis.scene.verdict","typeLabel":"enum\u003cstring>"},"confidence":{"type":"number","minimum":0,"maximum":1,"isRequired":true,"uniqueKey":"video_analysis.scene.confidence","typeLabel":"number"},"reasoning":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.scene.reasoning","typeLabel":"string"}},"required":["verdict","confidence","reasoning"],"description":"Whether the clip as a whole shows what the video step's `expected_scene` asked for, judged once over a contact sheet of its frames, with the reason. Absent when the step declared no scene or the check did not run.","uniqueKey":"video_analysis.scene","typeLabel":"object"},"condition":{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"video_analysis.condition.score","typeLabel":"number"},"label":{"type":"string","enum":["good","fair","poor"],"isRequired":true,"uniqueKey":"video_analysis.condition.label","typeLabel":"enum\u003cstring>"},"aspects":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.condition.aspects.items.[INDEX].name","typeLabel":"string"},"score":{"type":"number","minimum":0,"maximum":10,"isRequired":true,"uniqueKey":"video_analysis.condition.aspects.items.[INDEX].score","typeLabel":"number"},"reasoning":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.condition.aspects.items.[INDEX].reasoning","typeLabel":"string"}},"required":["name","score","reasoning"],"description":"One scored aspect of the condition assessment. `name` echoes the free-form tenant-defined aspect from `condition_aspects` verbatim — any language, any domain, no fixed vocabulary. `score` is 0..10 with one decimal; `reasoning` is a one-or-two-sentence visual justification.","uniqueKey":"video_analysis.condition.aspects.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"video_analysis.condition.aspects","typeLabel":"object[]"},"provenance":{"type":"object","properties":{"model":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.condition.provenance.model","typeLabel":"string"},"prompt":{"type":"string","isRequired":true,"uniqueKey":"video_analysis.condition.provenance.prompt","typeLabel":"string"},"instructions_sha256":{"type":"string","minLength":64,"maxLength":64,"uniqueKey":"video_analysis.condition.provenance.instructions_sha256","typeLabel":"string"}},"required":["model","prompt"],"description":"What produced this assessment: the model, the prompt (`id@version`) and, when your organization's condition instructions applied, their SHA-256 — so a result stays tied to the guidance and model of its day. Absent on assessments written before this field existed.","uniqueKey":"video_analysis.condition.provenance","typeLabel":"object"}},"required":["score","label","aspects"],"description":"The video step's `condition_aspects` scored over a contact sheet of the clip — the same 0..10 rubric and labels a photo step gets, read across the whole recording. Absent when the step declared no aspects or the check did not run.","uniqueKey":"video_analysis.condition","typeLabel":"object"}},"required":["capture_id","frames_extracted","frames_analyzed","signals","analyzed_at"],"description":"Analysis of a video-step clip, sampled at one frame per second and run through the same checks a photo gets. Written asynchronously after capture — poll or use webhooks; absent until the worker has run.","uniqueKey":"video_analysis","typeLabel":"object"},"ocr_primary":{"type":"string","uniqueKey":"ocr_primary","typeLabel":"string"},"similar_photo":{"type":"object","properties":{"verification_id":{"type":"string","isRequired":true,"uniqueKey":"similar_photo.verification_id","typeLabel":"string"},"capture_id":{"type":"string","isRequired":true,"uniqueKey":"similar_photo.capture_id","typeLabel":"string"},"distance":{"type":"integer","minimum":0,"maximum":64,"isRequired":true,"uniqueKey":"similar_photo.distance","typeLabel":"integer"},"method":{"type":"string","enum":["phash","embedding"],"uniqueKey":"similar_photo.method","typeLabel":"enum\u003cstring>"},"cosine":{"type":"number","minimum":-1,"maximum":1,"uniqueKey":"similar_photo.cosine","typeLabel":"number"},"inliers":{"type":"integer","minimum":0,"uniqueKey":"similar_photo.inliers","typeLabel":"integer"}},"required":["verification_id","capture_id","distance"],"description":"An earlier verification of yours whose photo matches this one. `method: \"phash\"`: the perceptual hashes are within threshold (Hamming `distance` 0–64; 0 is bit-identical) — a re-upload. `method: \"embedding\"`: the hashes differ but the photos are the same scene by embedding (`cosine`) and a geometric check confirmed it (`inliers`) — a screenshot or a crop. Present only when a match was found. It does not change `rial`: a legitimate re-submission and a recycled photo look the same — your reviewer decides.","uniqueKey":"similar_photo","typeLabel":"object"},"answers":{"type":"object","additionalProperties":{"type":"object","properties":{"value":{"type":"string","maxLength":2000,"isRequired":true,"uniqueKey":"answers.additionalProperties.value","typeLabel":"string"},"answered_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"answers.additionalProperties.answered_at","typeLabel":"string\u003cdate-time>"},"values":{"type":"array","items":{"type":"string","uniqueKey":"answers.additionalProperties.values.items.[INDEX]","typeLabel":"string"},"uniqueKey":"answers.additionalProperties.values","typeLabel":"string[]"},"address":{"type":"object","properties":{"street":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.street","typeLabel":"string"},"number":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.number","typeLabel":"string"},"neighborhood":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.neighborhood","typeLabel":"string"},"city":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.city","typeLabel":"string"},"region":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.region","typeLabel":"string"},"postal_code":{"type":"string","maxLength":200,"isRequired":true,"uniqueKey":"answers.additionalProperties.address.postal_code","typeLabel":"string"},"complement":{"type":"string","maxLength":200,"uniqueKey":"answers.additionalProperties.address.complement","typeLabel":"string"}},"required":["street","number","neighborhood","city","region","postal_code"],"additionalProperties":false,"uniqueKey":"answers.additionalProperties.address","typeLabel":"object"}},"required":["value","answered_at"],"description":"One answered text step. `value` is USER-DECLARED — typed by the person capturing; unlike live-captured content, it is never sensor-attested. Potential PII: it rides the operator/developer contracts and the webhook only, never OG cards or third-party public surfaces.","uniqueKey":"answers.additionalProperties","typeLabel":"object"},"uniqueKey":"answers","typeLabel":"object"},"record_seal":{"oneOf":[{"type":"object","description":"Integrity seal over the verification record including `answers`. Present only when answers exist and sealing is on (`seal !== false`). The hash proves the stored answers have not changed — it does NOT claim they are true or sensor-attested; `answers_provenance` carries that distinction explicitly.","required":["algorithm","hash","covers","answers_provenance"],"properties":{"algorithm":{"type":"string","enum":["sha256"],"isRequired":true,"uniqueKey":"record_seal.oneOf.0.algorithm","typeLabel":"enum\u003cstring>"},"hash":{"type":"string","minLength":64,"maxLength":64,"isRequired":true,"uniqueKey":"record_seal.oneOf.0.hash","typeLabel":"string"},"covers":{"type":"array","items":{"type":"string","enum":["record","answers"],"uniqueKey":"record_seal.oneOf.0.covers.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"record_seal.oneOf.0.covers","typeLabel":"enum\u003cstring>[]"},"answers_provenance":{"type":"string","enum":["user_declared"],"isRequired":true,"uniqueKey":"record_seal.oneOf.0.answers_provenance","typeLabel":"enum\u003cstring>"}},"uniqueKey":"record_seal.oneOf.0","typeLabel":"object"},{"type":"object","description":"Integrity seal over the verification record including `answers`. Present only when answers exist and sealing is on (`seal !== false`). The hash proves the stored answers have not changed — it does NOT claim they are true or sensor-attested; `answers_provenance` carries that distinction explicitly.","required":["algorithm","hash","covers","answers_provenance"],"properties":{"algorithm":{"type":"string","enum":["sha3-512"],"isRequired":true,"uniqueKey":"record_seal.oneOf.1.algorithm","typeLabel":"enum\u003cstring>"},"hash":{"type":"string","minLength":128,"maxLength":128,"isRequired":true,"uniqueKey":"record_seal.oneOf.1.hash","typeLabel":"string"},"covers":{"type":"array","items":{"type":"string","enum":["record","answers"],"uniqueKey":"record_seal.oneOf.1.covers.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"record_seal.oneOf.1.covers","typeLabel":"enum\u003cstring>[]"},"answers_provenance":{"type":"string","enum":["user_declared"],"isRequired":true,"uniqueKey":"record_seal.oneOf.1.answers_provenance","typeLabel":"enum\u003cstring>"}},"uniqueKey":"record_seal.oneOf.1","typeLabel":"object"}],"uniqueKey":"record_seal","typeLabel":"object"}},"required":["id","status","capture_url","created_at","expires_at","captures_count"],"description":"A verification as your API key sees it. `verdict` appears once analysis finished; `object_match`, `location_match` and `condition` appear when you asked for them and the check ran. Your `metadata` is not echoed back: keep the `id`.","uniqueKey":"","typeLabel":"object"},"example":{"id":"vfy_01HXYZABCDEFGHJKMNPQRSTVWX","status":"pending","capture_url":"https://verify.rial.io/v/vfy_01HXYZABCDEFGHJKMNPQRSTVWX","created_at":"2026-09-16T19:06:57.718Z","expires_at":"2026-09-16T20:06:57.718Z","captures_count":0},"examples":{"Example":{"title":"Example","value":{"id":"vfy_01HXYZABCDEFGHJKMNPQRSTVWX","status":"pending","capture_url":"https://verify.rial.io/v/vfy_01HXYZABCDEFGHJKMNPQRSTVWX","created_at":"2026-09-16T19:06:57.718Z","expires_at":"2026-09-16T20:06:57.718Z","captures_count":0}}},"exampleType":"examples"}},"exampleType":"examples"},"cf6f9e59-af01-403f-8623-723f9718993f":{"description":"Request body failed Zod validation.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].path","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].message","typeLabel":"string"}},"required":["path","message"],"uniqueKey":"error.fields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.fields","typeLabel":"object[]"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Uniform error envelope. `code` is the stable string SDKs branch on (`invalid_request`, `unauthorized`, `not_found`, `expired`, `step_full`, `unknown_step`, `steps_incomplete`, `already_finalized`, `too_many_requests`, `plan_limit_reached`, `insufficient_credits`, `monthly_verification_limit_reached`, `storage_unavailable`, `internal_error`, `report_not_ready`, `report_inconclusive`). `fields` is only present on `invalid_request` validation failures.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"invalid_request","message":"Request body failed validation","fields":[{"path":"config.max_captures","message":"must be ≤ 20"}]}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"Request body failed validation","fields":[{"path":"config.max_captures","message":"must be ≤ 20"}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"a54f3a53-8357-4073-8218-437ce992af48":{"description":"No valid session / API key / bot HMAC.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].path","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].message","typeLabel":"string"}},"required":["path","message"],"uniqueKey":"error.fields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.fields","typeLabel":"object[]"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Uniform error envelope. `code` is the stable string SDKs branch on (`invalid_request`, `unauthorized`, `not_found`, `expired`, `step_full`, `unknown_step`, `steps_incomplete`, `already_finalized`, `too_many_requests`, `plan_limit_reached`, `insufficient_credits`, `monthly_verification_limit_reached`, `storage_unavailable`, `internal_error`, `report_not_ready`, `report_inconclusive`). `fields` is only present on `invalid_request` validation failures.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthorized","message":"Missing or invalid API key"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Missing or invalid API key"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d5da03ee-9251-4f22-83b5-67ced68346f2":{"description":"`plan_limit_reached` or `insufficient_credits`: monthly plan quota and legacy credits cannot cover another image. `monthly_verification_limit_reached`: the account already created its monthly verification allowance (1000 unless agreed otherwise) this UTC calendar month, through any channel; creation reopens when the month turns, or on the Enterprise plan. Verifications and links already created can still be completed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].path","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].message","typeLabel":"string"}},"required":["path","message"],"uniqueKey":"error.fields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.fields","typeLabel":"object[]"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Uniform error envelope. `code` is the stable string SDKs branch on (`invalid_request`, `unauthorized`, `not_found`, `expired`, `step_full`, `unknown_step`, `steps_incomplete`, `already_finalized`, `too_many_requests`, `plan_limit_reached`, `insufficient_credits`, `monthly_verification_limit_reached`, `storage_unavailable`, `internal_error`, `report_not_ready`, `report_inconclusive`). `fields` is only present on `invalid_request` validation failures.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"monthly_verification_limit_reached","message":"Monthly limit of 1000 verifications reached. Contact Rial to move to the Enterprise plan."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"monthly_verification_limit_reached","message":"Monthly limit of 1000 verifications reached. Contact Rial to move to the Enterprise plan."}}}},"exampleType":"examples"}},"exampleType":"examples"},"8c6e7234-70be-405f-8ef7-f481c7b95174":{"description":"Tenant rate limit exceeded. Response carries `Retry-After: \u003cseconds>` per RFC 7231.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"fields":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].path","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.fields.items.[INDEX].message","typeLabel":"string"}},"required":["path","message"],"uniqueKey":"error.fields.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.fields","typeLabel":"object[]"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Uniform error envelope. `code` is the stable string SDKs branch on (`invalid_request`, `unauthorized`, `not_found`, `expired`, `step_full`, `unknown_step`, `steps_incomplete`, `already_finalized`, `too_many_requests`, `plan_limit_reached`, `insufficient_credits`, `monthly_verification_limit_reached`, `storage_unavailable`, `internal_error`, `report_not_ready`, `report_inconclusive`). `fields` is only present on `invalid_request` validation failures.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"too_many_requests","message":"Rate limit exceeded for this tenant. Retry after the specified interval."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"too_many_requests","message":"Rate limit exceeded for this tenant. Retry after the specified interval."}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"6b513bd2-34bd-4229-b12b-afd86506accf":{"bearerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"rk_secret_\u003ckey>","description":"Secret API key, created in the dashboard under Settings → API. Send it as `Authorization: Bearer rk_secret_…` from your server only. Publishable keys (`pk_live_…`) are for the native SDKs and reach the capture endpoints alone. An unknown key returns 401.","scopes":[],"schemeName":"bearerApiKey"}}},"servers":{"36fbb192-4b2b-49e9-a768-331bb5be3efb":{"url":"https://api.rial.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"rk_secret_\u003ckey>","description":"Secret API key, created in the dashboard under Settings → API. Send it as `Authorization: Bearer rk_secret_…` from your server only. Publishable keys (`pk_live_…`) are for the native SDKs and reach the capture endpoints alone. An unknown key returns 401.","scopes":[],"schemeName":"bearerApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Secret API key, created in the dashboard under Settings → API. Send it as `Authorization: Bearer rk_secret_…` from your server only. Publishable keys (`pk_live_…`) are for the native SDKs and reach the capture endpoints alone. An unknown key returns 401.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerApiKey","name":"Authorization"}],"title":"bearerApiKey"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"rial-84ef3b7b","siteName":"Rial","title":"Create a verification - Rial","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-16T02:35:03.277Z","originalFileLocation":"api-reference/verifications/create-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=\"dark\"}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=\"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rial\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_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/rial-84ef3b7b/gbn7Xo3tfij-224p/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a verification - Rial\">\u003cmeta data-mint-head property=\"og:description\" content=\"Verify that a photo is real. API, CLI and native SDKs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rial\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rial.io/api-reference/verifications/create-a-verification\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rial-84ef3b7b.mintlify.app/_mintlify/api/og/v2?division=Verifications\u0026amp;title=Create+a+verification\u0026amp;description=Create+a+verification+and+get+the+link+to+send.+Its+settings+are+fixed+once+created%3B+to+change+them%2C+create+another.\u0026amp;theme=306c988e28abd98ddc2e84f3\u0026amp;signature=a5fa73968ea16d3193e059944d2e3cb3dc479a969937ea918eda94d88d490942\">\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=\"Create a verification - Rial\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Verify that a photo is real. API, CLI and native SDKs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rial-84ef3b7b.mintlify.app/_mintlify/api/og/v2?division=Verifications\u0026amp;title=Create+a+verification\u0026amp;description=Create+a+verification+and+get+the+link+to+send.+Its+settings+are+fixed+once+created%3B+to+change+them%2C+create+another.\u0026amp;theme=306c988e28abd98ddc2e84f3\u0026amp;signature=a5fa73968ea16d3193e059944d2e3cb3dc479a969937ea918eda94d88d490942\">\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/rial-84ef3b7b/gbn7Xo3tfij-224p/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rial\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1C1C1A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rial.io/api-reference/verifications/create-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/create-a-verification.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rial.io/#organization\",\"name\":\"Rial\",\"url\":\"https://docs.rial.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rial-84ef3b7b/3BGl3crqe81CslFi/logo/rial-imagotype-light.svg?fit=max\u0026auto=format\u0026n=3BGl3crqe81CslFi\u0026q=85\u0026s=f87832b55472581c748e69fe09932a5e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rial.io#website\",\"name\":\"Rial\",\"url\":\"https://docs.rial.io\",\"publisher\":{\"@id\":\"https://docs.rial.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rial.io/api-reference/verifications/create-a-verification#webpage\",\"url\":\"https://docs.rial.io/api-reference/verifications/create-a-verification\",\"name\":\"Create a verification\",\"description\":\"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.\",\"dateModified\":\"2026-10-16T02:35:03.277Z\",\"isPartOf\":{\"@id\":\"https://docs.rial.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.rial.io/api-reference/verifications/create-a-verification#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.rial.io/api-reference/verifications/create-a-verification#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Verifications\",\"item\":\"https://docs.rial.io/api-reference/verifications/list-verifications\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a verification\",\"item\":\"https://docs.rial.io/api-reference/verifications/create-a-verification\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.rial.io/api-reference/verifications/create-a-verification#apireference\",\"headline\":\"Create a verification\",\"name\":\"Create a verification\",\"description\":\"Create a verification and get the link to send. Its settings are fixed once created; to change them, create another.\",\"url\":\"https://docs.rial.io/api-reference/verifications/create-a-verification\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rial.io/api-reference/verifications/create-a-verification#webpage\"},\"dateModified\":\"2026-10-16T02:35:03.277Z\",\"publisher\":{\"@id\":\"https://docs.rial.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rial.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rial\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rial","nav":{"global":null,"tabs":[{"tab":"Get started","icon":"rocket","pages":[{"title":"Get started","href":""}]},{"tab":"SDKs \u0026 tools","icon":"code","pages":[{"title":"SDKs \u0026 tools","href":"/sdks/node"}]},{"tab":"API reference","icon":"book-open","groups":[{"group":"Credits","pages":[{"title":"Get the credit balance, saved card and monthly spend","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/me/credits","href":"/api-reference/credits/get-the-credit-balance-saved-card-and-monthly-spend"},{"title":"Get a link where a person saves the card agents will charge","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/me/credits/payment-method","href":"/api-reference/credits/get-a-link-where-a-person-saves-the-card-agents-will-charge"},{"title":"Buy a pack of photo credits with the saved card","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/me/credits/top-ups","href":"/api-reference/credits/buy-a-pack-of-photo-credits-with-the-saved-card"}]},{"group":"Verifications","pages":[{"title":"List verifications","description":"Newest first. Pass `next_cursor` back as `cursor` for the next page.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/verifications","href":"/api-reference/verifications/list-verifications"},{"title":"Create a verification","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/verifications","href":"/api-reference/verifications/create-a-verification"},{"title":"Get a verification","description":"The verification and its results: `verdict` once analysis finished, plus the checks you asked for.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/verifications/{id}","href":"/api-reference/verifications/get-a-verification"},{"title":"Get optional damage localization results","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/verifications/{id}/damage-localization","href":"/api-reference/verifications/get-optional-damage-localization-results"},{"title":"Get the share-safe result","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/verifications/{id}/public","href":"/api-reference/verifications/get-the-share-safe-result"},{"title":"Get the event log","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/verifications/{id}/events","href":"/api-reference/verifications/get-the-event-log"},{"title":"Finalize with a narrative","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/verifications/{id}/finalize","href":"/api-reference/verifications/finalize-with-a-narrative"}]},{"group":"Audits","pages":[{"title":"Audit a photo for AI generation in one call","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/audits/sync","href":"/api-reference/audits/audit-a-photo-for-ai-generation-in-one-call"}]},{"group":"Templates","pages":[{"title":"List templates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/link-templates","href":"/api-reference/templates/list-templates"},{"title":"Publish a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/link-templates","href":"/api-reference/templates/publish-a-template"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /v1/link-templates/{slug}","href":"/api-reference/templates/delete-a-template"},{"title":"Update a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/link-templates/{slug}","href":"/api-reference/templates/update-a-template"},{"title":"Preview a CSV import","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/link-templates/{slug}/import/preview","href":"/api-reference/templates/preview-a-csv-import"},{"title":"Import a CSV","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/link-templates/{slug}/import","href":"/api-reference/templates/import-a-csv"},{"title":"Check an import","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/link-templates/imports/{jobId}","href":"/api-reference/templates/check-an-import"},{"title":"Simulate a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/link-templates/{slug}/simulate","href":"/api-reference/templates/simulate-a-template"},{"title":"Create a verification from a template","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/link-templates/{slug}/verifications","href":"/api-reference/templates/create-a-verification-from-a-template"}]},{"group":"Databases","pages":[{"title":"List your databases","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/databases","href":"/api-reference/databases/list-your-databases"},{"title":"Create a database from rows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/databases","href":"/api-reference/databases/create-a-database-from-rows"},{"title":"Replace a database's rows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /v1/databases/{id}","href":"/api-reference/databases/replace-a-databases-rows"},{"title":"Rename a database","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /v1/databases/{id}","href":"/api-reference/databases/rename-a-database"}]}]}]},"basePath":"","title":"Create a verification - Rial","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}