curl --request GET \
--url https://api.verify.privue.ai/workflows/{workflow_key} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.verify.privue.ai/workflows/{workflow_key}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.verify.privue.ai/workflows/{workflow_key}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"key": "merchant-onboarding",
"name": "Merchant onboarding",
"mode": "hosted",
"version": 3,
"expires_after_days": 30,
"groups": [
{
"key": "registration",
"title": "Registration details",
"content": "The registrations the business is held under."
}
],
"steps": [
{
"key": "contact",
"type": "form",
"title": "Before we start",
"label": "contact_email",
"group": null,
"required": true,
"intake": {
"slots": [],
"values": [
"email"
]
},
"condition": null,
"inputs": {},
"settings": {
"fields": [
{
"key": "email",
"name": "email",
"content": "Email address",
"type": "text",
"optional": false,
"carried": false,
"choices": null,
"pattern": "email",
"asked_when": [],
"note": null
}
],
"reads": []
}
},
{
"key": "gst",
"type": "gst-certificate",
"title": "GST certificate",
"label": "tax_registration",
"group": "registration",
"required": true,
"intake": {
"slots": [
{
"key": "gst-certificate",
"required": true,
"kinds": [
{
"key": "gst-certificate",
"label": "gst_certificate",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"contact_details": false,
"ask_if_registered": false,
"certificate": {
"title": null,
"content": null,
"label": "gst_certificate"
}
}
},
{
"key": "pan",
"type": "pan-card",
"title": "PAN card",
"label": "entity_pan",
"group": "registration",
"required": true,
"intake": {
"slots": [
{
"key": "pan-card",
"required": true,
"kinds": [
{
"key": "pan-card",
"label": "entity_pan",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": {
"op": "in",
"value": [
"Private Limited Company",
"Public Limited Company"
],
"kind": "step-comparison",
"step_key": "gst",
"field": "business_constitution"
},
"inputs": {
"gstin": {
"step_key": "gst",
"field": "gstin"
}
},
"settings": {
"card": {
"title": null,
"content": null,
"label": "entity_pan"
}
}
},
{
"key": "identity",
"type": "digilocker",
"title": "Identity",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"documents": [
{
"doc_type": "aadhaar",
"required": true
}
]
}
},
{
"key": "selfie",
"type": "selfie",
"title": "Selfie",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "selfie",
"required": true,
"kinds": [
{
"key": "selfie",
"label": null,
"accept": [
{
"types": [
"image"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"liveness": true,
"face_match": false,
"selfie": {
"title": null,
"content": null,
"label": null
}
}
},
{
"key": "bank",
"type": "bank-account",
"title": "Bank account",
"label": "payout_account",
"group": null,
"required": true,
"intake": {
"slots": [
{
"key": "bank-account-proof",
"required": true,
"kinds": [
{
"key": "statement",
"label": "bank_statement",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 6,
"min": 1
}
]
},
{
"key": "cheque",
"label": "cancelled_cheque",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": [
"account_number",
"ifsc"
]
},
"condition": null,
"inputs": {
"names": {
"step_key": "pan",
"field": "names"
}
},
"settings": {
"mode": "penny-less",
"proof": {
"title": null,
"content": null,
"documents": [
{
"kind": "statement",
"label": "bank_statement",
"title": null,
"content": null
},
{
"kind": "cheque",
"label": "cancelled_cheque",
"title": null,
"content": null
}
]
}
}
},
{
"key": "trade-licence",
"type": "documents",
"title": "Trade licence",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "licence",
"required": true,
"kinds": [
{
"key": "licence",
"label": "trade_licence",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
},
{
"key": "lease",
"required": false,
"kinds": [
{
"key": "lease",
"label": "lease_agreement",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"slots": [
{
"key": "licence",
"title": "Shop and establishment licence",
"content": null,
"required": true,
"kinds": [
{
"key": "licence",
"label": "trade_licence",
"title": null,
"content": null,
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
},
{
"key": "lease",
"title": "Lease agreement",
"content": null,
"required": false,
"kinds": [
{
"key": "lease",
"label": "lease_agreement",
"title": null,
"content": null,
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
]
}
},
{
"key": "premises",
"type": "premises-photos",
"title": "Premises photos",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"photos": [
{
"key": "storefront",
"label": "storefront_photo",
"title": "The front of the premises",
"content": null,
"min_count": 1
},
{
"key": "interior",
"label": "interior_photo",
"title": "Inside the premises",
"content": null,
"min_count": 1
}
]
}
},
{
"key": "premises-proof",
"type": "address-proof",
"title": "Proof of premises",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "utility-bill",
"required": true,
"kinds": [
{
"key": "electricity",
"label": "electricity_bill",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {
"addresses": {
"step_key": "gst",
"field": "addresses"
},
"names": {
"step_key": "gst",
"field": "names"
}
},
"settings": {
"slots": [
{
"key": "utility-bill",
"title": "Utility bill",
"content": null,
"required": true,
"kinds": [
{
"key": "electricity",
"label": "electricity_bill",
"title": null,
"content": null,
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"min_verified_addresses": 1
}
},
{
"key": "alt-business-proof",
"type": "documents",
"title": "Alternative proof of business",
"label": null,
"group": null,
"required": true,
"intake": {
"slots": [
{
"key": "incorporation",
"required": true,
"kinds": [
{
"key": "incorporation",
"label": "incorporation_certificate",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": {
"kind": "step-outcome",
"step_key": "gst",
"settled": "failed"
},
"inputs": {},
"settings": {
"slots": [
{
"key": "incorporation",
"title": "Certificate of incorporation",
"content": null,
"required": true,
"kinds": [
{
"key": "incorporation",
"label": "incorporation_certificate",
"title": null,
"content": null,
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
]
}
},
{
"key": "addresses",
"type": "address-tagging",
"title": "Tag the addresses",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": [
"addresses"
]
},
"condition": null,
"inputs": {
"presented_addresses": {
"step_key": "premises",
"field": "addresses"
},
"known_addresses": {
"step_key": "gst",
"field": "addresses"
}
},
"settings": {
"tags": [
"Registered Office",
"Principal Business Address",
"Additional Place of Business"
]
}
},
{
"key": "review",
"type": "review",
"title": "Review",
"label": "applicant_signoff",
"group": null,
"required": true,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"declarations": [
{
"key": "terms-of-service",
"label": "tos_consent",
"title": "Terms of service",
"content": "I accept the [terms of service](https://yourapp.com/terms) and the [privacy policy](https://yourapp.com/privacy).",
"optional": false,
"default": false
},
{
"key": "information-true",
"label": "truth_declaration",
"title": null,
"content": "Everything I have provided is true and correct to the best of my knowledge.",
"optional": false,
"default": false
},
{
"key": "contact-on-whatsapp",
"label": "whatsapp_optin",
"title": null,
"content": "You may contact me about this application on WhatsApp.",
"optional": true,
"default": false
}
],
"submit_label": "Submit",
"success_title": "Submitted",
"success_message": "Thank you for providing all the information. We will be in touch."
}
}
],
"environment": "production",
"credits": {
"granted": 700,
"consumed": 412,
"expired": 0,
"revoked": 0,
"remaining": 288,
"expiring": [
{
"amount": 88,
"on": "2026-09-30"
},
{
"amount": 200,
"on": "2027-03-31"
}
]
},
"runs": {
"live": 17,
"limit": 25
},
"resets": {
"granted": 50,
"drawn": 6,
"expired": 0,
"revoked": 0,
"remaining": 44,
"expiring": [
{
"amount": 24,
"on": "2027-03-31"
},
{
"amount": 20,
"on": "2027-06-30"
}
]
},
"output_transformations": {
"gst-certificate": {
"legal_name": {
"name": "company_name",
"transform": null
},
"registration_date": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$fromMillis($toMillis($), '[D01]/[M01]/[Y0001]')"
}
},
"primary_business_address": {
"name": "registered_address",
"transform": {
"kind": "jsonata",
"expression": "street & ', ' & city & ', ' & state & ' ' & postal_code"
}
},
"filings[].filing_date": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$fromMillis($toMillis($), '[D01]/[M01]/[Y0001]')"
}
}
},
"pan-card": {
"pan": {
"name": "pan_number",
"transform": null
},
"aadhaar_seeded": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$ ? 'Y' : 'N'"
}
}
}
},
"output_names": {
"gst-certificate": {
"legal_name": "company_name",
"primary_business_address": "registered_address"
},
"pan-card": {
"pan": "pan_number"
}
}
}{
"code": "workflow-not-found",
"detail": "client 'acme' has no active workflow 'merchant-onboarding'"
}{
"code": "unauthenticated",
"detail": "Missing or malformed Authorization header"
}{
"code": "environment-mismatch",
"detail": "workflow 'merchant-onboarding' is production and this request is for uat"
}{
"code": "request-invalid",
"detail": "verification_id: Input should be a valid UUID, invalid character: found `n` at 1"
}{
"code": "rate-limited",
"detail": "Unauthorized: RATE_LIMITED"
}{
"code": "auth-unavailable",
"detail": "Auth provider unavailable"
}Read a workflow
Read the journey a workflow key runs, step by step.
Read this to see how the workflow is conducted, what it asks for, and how each step is answered over the API: the slots its documents go in and the values it takes, under intake.
The mode, the step keys and each step’s intake are stable: they are how you address a document or a value, so they do not change under a workflow you are integrated against. Everything else here is configuration we hold and maintain - the settings on a step, the conditions that gate it, which steps exist at all - and those are ours to tune as a journey is refined.
A refined journey is published as the workflow’s next version, and this reads the latest version, which is the one a verification created now runs. A verification already created keeps the version it names in version until it is reset, so a refinement never changes what one under way asks for or how a finished one reads.
So build against the mode, the keys and the intake, and read the rest. For results, drive off the steps array a verification returns, where every entry carries the same envelope whatever the workflow does.
Every step the workflow can present is returned, in the order they are answered. A step that carries a condition is only presented when that condition holds, so any one verification walks some of these rather than all of them. Which steps a given verification actually walked is on its record, which reports those and leaves the rest out.
curl --request GET \
--url https://api.verify.privue.ai/workflows/{workflow_key} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.verify.privue.ai/workflows/{workflow_key}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.verify.privue.ai/workflows/{workflow_key}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"key": "merchant-onboarding",
"name": "Merchant onboarding",
"mode": "hosted",
"version": 3,
"expires_after_days": 30,
"groups": [
{
"key": "registration",
"title": "Registration details",
"content": "The registrations the business is held under."
}
],
"steps": [
{
"key": "contact",
"type": "form",
"title": "Before we start",
"label": "contact_email",
"group": null,
"required": true,
"intake": {
"slots": [],
"values": [
"email"
]
},
"condition": null,
"inputs": {},
"settings": {
"fields": [
{
"key": "email",
"name": "email",
"content": "Email address",
"type": "text",
"optional": false,
"carried": false,
"choices": null,
"pattern": "email",
"asked_when": [],
"note": null
}
],
"reads": []
}
},
{
"key": "gst",
"type": "gst-certificate",
"title": "GST certificate",
"label": "tax_registration",
"group": "registration",
"required": true,
"intake": {
"slots": [
{
"key": "gst-certificate",
"required": true,
"kinds": [
{
"key": "gst-certificate",
"label": "gst_certificate",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"contact_details": false,
"ask_if_registered": false,
"certificate": {
"title": null,
"content": null,
"label": "gst_certificate"
}
}
},
{
"key": "pan",
"type": "pan-card",
"title": "PAN card",
"label": "entity_pan",
"group": "registration",
"required": true,
"intake": {
"slots": [
{
"key": "pan-card",
"required": true,
"kinds": [
{
"key": "pan-card",
"label": "entity_pan",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": {
"op": "in",
"value": [
"Private Limited Company",
"Public Limited Company"
],
"kind": "step-comparison",
"step_key": "gst",
"field": "business_constitution"
},
"inputs": {
"gstin": {
"step_key": "gst",
"field": "gstin"
}
},
"settings": {
"card": {
"title": null,
"content": null,
"label": "entity_pan"
}
}
},
{
"key": "identity",
"type": "digilocker",
"title": "Identity",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"documents": [
{
"doc_type": "aadhaar",
"required": true
}
]
}
},
{
"key": "selfie",
"type": "selfie",
"title": "Selfie",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "selfie",
"required": true,
"kinds": [
{
"key": "selfie",
"label": null,
"accept": [
{
"types": [
"image"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"liveness": true,
"face_match": false,
"selfie": {
"title": null,
"content": null,
"label": null
}
}
},
{
"key": "bank",
"type": "bank-account",
"title": "Bank account",
"label": "payout_account",
"group": null,
"required": true,
"intake": {
"slots": [
{
"key": "bank-account-proof",
"required": true,
"kinds": [
{
"key": "statement",
"label": "bank_statement",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 6,
"min": 1
}
]
},
{
"key": "cheque",
"label": "cancelled_cheque",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": [
"account_number",
"ifsc"
]
},
"condition": null,
"inputs": {
"names": {
"step_key": "pan",
"field": "names"
}
},
"settings": {
"mode": "penny-less",
"proof": {
"title": null,
"content": null,
"documents": [
{
"kind": "statement",
"label": "bank_statement",
"title": null,
"content": null
},
{
"kind": "cheque",
"label": "cancelled_cheque",
"title": null,
"content": null
}
]
}
}
},
{
"key": "trade-licence",
"type": "documents",
"title": "Trade licence",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "licence",
"required": true,
"kinds": [
{
"key": "licence",
"label": "trade_licence",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
},
{
"key": "lease",
"required": false,
"kinds": [
{
"key": "lease",
"label": "lease_agreement",
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"slots": [
{
"key": "licence",
"title": "Shop and establishment licence",
"content": null,
"required": true,
"kinds": [
{
"key": "licence",
"label": "trade_licence",
"title": null,
"content": null,
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
},
{
"types": [
"image"
],
"max": 3,
"min": 3
}
]
}
]
},
{
"key": "lease",
"title": "Lease agreement",
"content": null,
"required": false,
"kinds": [
{
"key": "lease",
"label": "lease_agreement",
"title": null,
"content": null,
"accept": [
{
"types": [
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
]
}
},
{
"key": "premises",
"type": "premises-photos",
"title": "Premises photos",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"photos": [
{
"key": "storefront",
"label": "storefront_photo",
"title": "The front of the premises",
"content": null,
"min_count": 1
},
{
"key": "interior",
"label": "interior_photo",
"title": "Inside the premises",
"content": null,
"min_count": 1
}
]
}
},
{
"key": "premises-proof",
"type": "address-proof",
"title": "Proof of premises",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [
{
"key": "utility-bill",
"required": true,
"kinds": [
{
"key": "electricity",
"label": "electricity_bill",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": null,
"inputs": {
"addresses": {
"step_key": "gst",
"field": "addresses"
},
"names": {
"step_key": "gst",
"field": "names"
}
},
"settings": {
"slots": [
{
"key": "utility-bill",
"title": "Utility bill",
"content": null,
"required": true,
"kinds": [
{
"key": "electricity",
"label": "electricity_bill",
"title": null,
"content": null,
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"min_verified_addresses": 1
}
},
{
"key": "alt-business-proof",
"type": "documents",
"title": "Alternative proof of business",
"label": null,
"group": null,
"required": true,
"intake": {
"slots": [
{
"key": "incorporation",
"required": true,
"kinds": [
{
"key": "incorporation",
"label": "incorporation_certificate",
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
],
"values": []
},
"condition": {
"kind": "step-outcome",
"step_key": "gst",
"settled": "failed"
},
"inputs": {},
"settings": {
"slots": [
{
"key": "incorporation",
"title": "Certificate of incorporation",
"content": null,
"required": true,
"kinds": [
{
"key": "incorporation",
"label": "incorporation_certificate",
"title": null,
"content": null,
"accept": [
{
"types": [
"image",
"pdf"
],
"max": 1,
"min": 1
}
]
}
]
}
]
}
},
{
"key": "addresses",
"type": "address-tagging",
"title": "Tag the addresses",
"label": null,
"group": null,
"required": false,
"intake": {
"slots": [],
"values": [
"addresses"
]
},
"condition": null,
"inputs": {
"presented_addresses": {
"step_key": "premises",
"field": "addresses"
},
"known_addresses": {
"step_key": "gst",
"field": "addresses"
}
},
"settings": {
"tags": [
"Registered Office",
"Principal Business Address",
"Additional Place of Business"
]
}
},
{
"key": "review",
"type": "review",
"title": "Review",
"label": "applicant_signoff",
"group": null,
"required": true,
"intake": {
"slots": [],
"values": []
},
"condition": null,
"inputs": {},
"settings": {
"declarations": [
{
"key": "terms-of-service",
"label": "tos_consent",
"title": "Terms of service",
"content": "I accept the [terms of service](https://yourapp.com/terms) and the [privacy policy](https://yourapp.com/privacy).",
"optional": false,
"default": false
},
{
"key": "information-true",
"label": "truth_declaration",
"title": null,
"content": "Everything I have provided is true and correct to the best of my knowledge.",
"optional": false,
"default": false
},
{
"key": "contact-on-whatsapp",
"label": "whatsapp_optin",
"title": null,
"content": "You may contact me about this application on WhatsApp.",
"optional": true,
"default": false
}
],
"submit_label": "Submit",
"success_title": "Submitted",
"success_message": "Thank you for providing all the information. We will be in touch."
}
}
],
"environment": "production",
"credits": {
"granted": 700,
"consumed": 412,
"expired": 0,
"revoked": 0,
"remaining": 288,
"expiring": [
{
"amount": 88,
"on": "2026-09-30"
},
{
"amount": 200,
"on": "2027-03-31"
}
]
},
"runs": {
"live": 17,
"limit": 25
},
"resets": {
"granted": 50,
"drawn": 6,
"expired": 0,
"revoked": 0,
"remaining": 44,
"expiring": [
{
"amount": 24,
"on": "2027-03-31"
},
{
"amount": 20,
"on": "2027-06-30"
}
]
},
"output_transformations": {
"gst-certificate": {
"legal_name": {
"name": "company_name",
"transform": null
},
"registration_date": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$fromMillis($toMillis($), '[D01]/[M01]/[Y0001]')"
}
},
"primary_business_address": {
"name": "registered_address",
"transform": {
"kind": "jsonata",
"expression": "street & ', ' & city & ', ' & state & ' ' & postal_code"
}
},
"filings[].filing_date": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$fromMillis($toMillis($), '[D01]/[M01]/[Y0001]')"
}
}
},
"pan-card": {
"pan": {
"name": "pan_number",
"transform": null
},
"aadhaar_seeded": {
"name": null,
"transform": {
"kind": "jsonata",
"expression": "$ ? 'Y' : 'N'"
}
}
}
},
"output_names": {
"gst-certificate": {
"legal_name": "company_name",
"primary_business_address": "registered_address"
},
"pan-card": {
"pan": "pan_number"
}
}
}{
"code": "workflow-not-found",
"detail": "client 'acme' has no active workflow 'merchant-onboarding'"
}{
"code": "unauthenticated",
"detail": "Missing or malformed Authorization header"
}{
"code": "environment-mismatch",
"detail": "workflow 'merchant-onboarding' is production and this request is for uat"
}{
"code": "request-invalid",
"detail": "verification_id: Input should be a valid UUID, invalid character: found `n` at 1"
}{
"code": "rate-limited",
"detail": "Unauthorized: RATE_LIMITED"
}{
"code": "auth-unavailable",
"detail": "Auth provider unavailable"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
The workflow: who completes it, and every step it can present.
A workflow as it is configured for you: who completes it, and the journey its key runs, step by step.
Everything the journey declares is the latest version's, which is the one a verification created now runs. A verification created earlier runs the version it names in version, and reads under that version for as long as it lasts.
The mode, the step keys and each step's intake are stable. The rest is configuration we maintain and tune without notice, so read it to understand a journey rather than to build behaviour against; the stable thing to integrate with is the verification record.
The key you name when creating a verification on this workflow.
The workflow's name, for showing in your own tools.
How verifications on this workflow are conducted. hosted: the person being verified walks the journey on our screens and submits it. staged: you create a verification, upload each document against the step it answers, and then ask for the checks to run. instant: you send the whole submission in one request, which runs the checks and answers with the finished record.
A workflow is one of the three, and every endpoint belonging to another is refused on it.
hosted, staged, instant The workflow's latest version, which is the one a verification created now runs. Versions are numbered from 1, and every change to the journey is published as the next one, so a number names one journey for good.
A verification keeps the version it was created on until it is reset, so a change reaches the verifications created after it and never one already under way. The mode is the workflow's, and the same on every version.
x >= 1How long a verification on the version reported here holds a user's data, counted from their last action. Once that window runs out the verification expires and everything the user provided is deleted. A verification is held for as long as the version it runs says.
The named parts the version reported here presents its steps in, in the order a user meets them. A step that belongs to one names it in group, and the steps of a group are consecutive, so each group heads one unbroken run of steps. A version that presents its steps under no headings at all has none of these.
Show child attributes
Show child attributes
Every step the version reported here can present, in the order a user meets them. A step that carries a condition is only presented when that condition holds, so any one verification walks some of these rather than all of them.
Show child attributes
Show child attributes
Which environment this workflow is in: uat for the ones you integrate and test against, production for your real work. An API key belongs to one environment and reaches only that environment's workflows, so a key of the other one is refused with 403. A uat workflow's key ends in -uat and a production workflow's never does, so the key in your own configuration says which you are pointed at.
A run is identical in both: the same steps, the same checks, the same verdicts and the same credits.
uat, production This workflow's prepaid credits as they stand.
Show child attributes
Show child attributes
How many verifications this workflow has going, against how many it may. An instant workflow reports these too: its verifications are open while their checks run, so they count towards the ceiling for as long as they take to answer.
Show child attributes
Show child attributes
The resets this workflow was sold, where they went, and what is left. They are sold with credits on the same terms and expire with them, so this reads exactly as credits does.
Clearing a verification that had not ended draws one, because the run being cleared was never charged for. It is held by the workflow rather than by any one verification, so where the allowance goes is a question about the workflow and not about the record a reset happened to fall on. A verification's own resets counts every reset of it, drawn or not.
An instant workflow reports these unmoved: its verifications are answered in the request that made them, so they are asked again rather than reset and nothing on one ever draws.
Show child attributes
Show child attributes
How the outputs of the version reported here reach you, by step type. Each entry names a field of what that step type publishes by the path it sits at, and states the name it arrives under in collected.outputs, the transform that converts its value, or both; [] in a path descends into every record of a list. A step type with no entry here reaches you as this reference describes it, as does every step type when this is empty.
A transform is a JSONata expression over the one value at its path, in the shape this reference documents it, and what it yields arrives in that value's place. It reads nothing else, so it never reaches another field or another step, and it always yields a value. Where a version's transformation cannot be applied to a verification's value, reading that verification answers workflow-misconfigured.
Only collected.outputs is transformed. The paths on the left are the names used everywhere else a field is named, this reference and collected.answer included, so read this to translate between the two.
The map belongs to the version, so a verification's outputs reach you as the version it runs states, and a change to it reaches the verifications created after it.
Show child attributes
Show child attributes
The names alone from output_transformations, by step type: each published path mapped to the name it arrives under in collected.outputs, for every entry that states one. A path whose entry states only a transform keeps its own name and is not listed.
A name is not the whole of how a field reaches you where its entry also converts the value, so read output_transformations for that.
Show child attributes
Show child attributes
