{
  "info": {
    "name": "VerityPro API",
    "description": "Generated from veritypro-openapi.json (do not edit by hand). Import an environment (VerityPro Sandbox or VerityPro Live) and set apiKey, integrationId and accountId. Sandbox is the default base URL.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Hosted Verification (v2)",
      "item": [
        {
          "name": "Mint an embed token (S2S)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/v2/embed/mint",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "v2",
                "embed",
                "mint"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\",\n  \"dateOfBirth\": \"1990-03-15\",\n  \"iso2Code\": \"AU\",\n  \"requestedSteps\": [\n    \"DOCUMENT\",\n    \"BIOMETRIC\"\n  ],\n  \"vendorData\": \"usr_a1b2c3d4\",\n  \"allowedParentOrigin\": \"https://yourapp.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Mint an embed token (S2S)\n\nCreate a one-time embed token that authorises a single user to complete a verification session. **Call this from your backend only** — your API key must never reach the browser.\n\nThe backend creates the verification session at mint time using the supplied identity details and step configuration. The token binds that pre-created session so no separate session-creation call is required from the browser.\n\nToken TTL: 5 minutes. Single-use — replay is rejected."
          }
        },
        {
          "name": "Exchange embed token for a session bearer (browser)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/v2/embed/exchange",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "v2",
                "embed",
                "exchange"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"embedToken\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Exchange embed token for a session bearer (browser)\n\nCalled automatically by the VerityPro Web SDK. The browser reads the embed token from the URL fragment (never query string) and exchanges it for a short-lived, verification-scoped bearer that lives only in a JS module closure — never `localStorage` or `sessionStorage`.\n\nThe response includes `verificationId`, which is the id of the **pre-created** session from mint time. The SDK fetches that session via `GET /v2/sessions/{id}`; it does not create a new session. Do not call this endpoint from your backend."
          }
        },
        {
          "name": "Create a verification session (S2S)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/v2/sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "v2",
                "sessions"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"vendorData\": \"your-internal-customer-id\",\n  \"steps\": [\n    \"DOCUMENT\",\n    \"BIOMETRIC\"\n  ],\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Smith\",\n  \"dateOfBirth\": \"1990-01-15\",\n  \"ISO2Code\": \"AU\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a verification session (S2S)\n\nCreates a v2 session. Send `data.nextAction.sessionUrl` to your customer, or drive capture with an SDK."
          }
        },
        {
          "name": "Get session state (S2S)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/v2/sessions/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "v2",
                "sessions",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": ""
                }
              ]
            },
            "description": "Get session state (S2S)\n\nRetrieve the current state of a v2 session.\n\n**Current production:** requires `x-api-key` + `Integrationid` (S2S only). Call this from your backend to confirm the authoritative result after the SDK fires `onResult`, or after receiving a webhook. **Never rely solely on the browser-side `onResult` to gate access.**\n\n**Target (pending bearer deployment):** the SDK also calls this endpoint with the session-scoped bearer after token exchange to fetch the pre-created session and derive which steps to render. This bearer-acceptance path is implemented in the hosted SDK but not yet enforced by the backend in production."
          }
        },
        {
          "name": "Mark a step complete (hosted SDK internal)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/v2/sessions/:id/steps/:step/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "v2",
                "sessions",
                ":id",
                "steps",
                ":step",
                "complete"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": ""
                },
                {
                  "key": "step",
                  "value": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Mark a step complete (hosted SDK internal)\n\nAdvance the session to the next step after all uploads for the current step are processed. Called automatically by the hosted SDK after document submission and OCR processing (retried while status is `processing`). You only need this if building a fully custom capture integration.\n\nAuth: session-scoped bearer (target) / API key (current production)."
          }
        }
      ]
    },
    {
      "name": "KYC Verification",
      "item": [
        {
          "name": "Submit captured ID document images (DOCUMENT step)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{sessionBearer}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/kyc-verification/update-kyc-verification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "kyc-verification",
                "update-kyc-verification"
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "SessionId",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "DocumentType",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "DocumentFront",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "DocumentBack",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "PortraitPicture",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "PlatformUsed",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "SecurityAssessmentJson",
                  "type": "file",
                  "src": ""
                }
              ]
            },
            "description": "Submit captured ID document images (DOCUMENT step)\n\nSubmit captured ID document images for the DOCUMENT step. Keyed by `kycEngineSessionId` (from `GET /v2/sessions/{id}` → `data.kycEngineSessionId`) — **not** the v2 session UUID.\n\nCalled automatically by the Web SDK. You only need this if you are building a custom capture UI.\n\nAuth: bearer token (from exchange) in `Authorization` header."
          }
        },
        {
          "name": "Create a KYC session (legacy v1)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/kyc-verification/add-kyc-verification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "kyc-verification",
                "add-kyc-verification"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"integrationId\": \"\",\n  \"firstName\": \"\",\n  \"lastName\": \"\",\n  \"ISO2Code\": \"AU\",\n  \"dateOfBirth\": \"1990-03-15\",\n  \"requiredModules\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a KYC session (legacy v1)\n\n**Legacy.** Creates a session and returns a hosted `sessionUrl` for the old `/verify/[id]` flow. Use `/v2/embed/mint` + the Web SDK for new integrations — better security, richer UI, and mobile parity."
          }
        }
      ]
    },
    {
      "name": "Address Verification",
      "item": [
        {
          "name": "Create an address verification (S2S or hosted flow)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/addressverification/address-verification/add-verification",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "addressverification",
                "address-verification",
                "add-verification"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"\",\n  \"lastName\": \"\",\n  \"streetAddress\": \"\",\n  \"ISO2Code\": \"AU\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create an address verification (S2S or hosted flow)\n\nCreate an address verification session. In the hosted embed flow, address document capture is orchestrated inside the `/hosted-verify` page and does not require a direct call to this endpoint from the browser — it is submitted internally by the hosted client. Use this endpoint from your backend for server-initiated address verification."
          }
        }
      ]
    },
    {
      "name": "Enhanced Due Diligence",
      "item": [
        {
          "name": "Basic EDD screen (S2S)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Integrationid",
                "value": "{{integrationId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/edd/api/v1/edd/basic/screen",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "edd",
                "api",
                "v1",
                "edd",
                "basic",
                "screen"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subjectId\": \"\",\n  \"subjectName\": \"\",\n  \"dateOfBirth\": \"1990-03-15\",\n  \"nationality\": \"AU\",\n  \"transactionAmount\": 15000,\n  \"transactionCurrency\": \"AUD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Basic EDD screen (S2S)\n\nRun a basic EDD screen (PEP, sanctions, adverse media) from your backend. Returns 200 for a clean result, 202 when a full EDD investigation is required.\n\nIn the hosted embed flow, EDD document collection is orchestrated inside the `/hosted-verify` page — a direct call to this endpoint from the browser is not required for the embed flow."
          }
        },
        {
          "name": "Trigger EDD for a verified customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/kyc-verification/trigger-edd?vendorData=your-internal-customer-id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "kyc-verification",
                "trigger-edd"
              ],
              "query": [
                {
                  "key": "vendorData",
                  "value": "your-internal-customer-id"
                }
              ]
            },
            "description": "Trigger EDD for a verified customer"
          }
        },
        {
          "name": "Create a Basic EDD assessment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/edd/api/v1/edd/basic/assessments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "edd",
                "api",
                "v1",
                "edd",
                "basic",
                "assessments"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subjectId\": \"your-user-id\",\n  \"subjectName\": \"Jane Smith\",\n  \"employerName\": \"Acme Corp\",\n  \"idempotencyKey\": \"edd-2026-001\",\n  \"clientReference\": \"REF-001\",\n  \"transactionSummary\": {\n    \"declaredMonthlyIncome\": 5000,\n    \"totalAmountSent\": 12000,\n    \"periodDays\": 90,\n    \"transactionCount\": 12\n  },\n  \"currency\": \"AUD\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a Basic EDD assessment"
          }
        },
        {
          "name": "Attach a supporting document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/edd/api/v1/edd/basic/assessments/:assessmentId/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "edd",
                "api",
                "v1",
                "edd",
                "basic",
                "assessments",
                ":assessmentId",
                "documents"
              ],
              "variable": [
                {
                  "key": "assessmentId",
                  "value": ""
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "document",
                  "type": "file",
                  "src": ""
                }
              ]
            },
            "description": "Attach a supporting document"
          }
        },
        {
          "name": "Submit the assessment for processing",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/edd/api/v1/edd/basic/assessments/:assessmentId/submit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "edd",
                "api",
                "v1",
                "edd",
                "basic",
                "assessments",
                ":assessmentId",
                "submit"
              ],
              "variable": [
                {
                  "key": "assessmentId",
                  "value": ""
                }
              ]
            },
            "description": "Submit the assessment for processing"
          }
        },
        {
          "name": "Get assessment status and verdict",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/edd/api/v1/edd/basic/assessments/:assessmentId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "edd",
                "api",
                "v1",
                "edd",
                "basic",
                "assessments",
                ":assessmentId"
              ],
              "variable": [
                {
                  "key": "assessmentId",
                  "value": ""
                }
              ]
            },
            "description": "Get assessment status and verdict"
          }
        }
      ]
    },
    {
      "name": "AML Transaction Monitoring",
      "item": [
        {
          "name": "Process a transaction (AML risk decision)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "X-Account-Id",
                "value": "{{accountId}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/transactionprocessing/api/v1/transactions/process",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "transactionprocessing",
                "api",
                "v1",
                "transactions",
                "process"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transaction_id\": \"TXN-2026-0001\",\n  \"user_id\": \"your-user-id\",\n  \"transaction_amount\": \"500.00\",\n  \"transaction_currency\": \"AUD\",\n  \"transaction_type\": \"Remittance\",\n  \"user_firstname\": \"Jane\",\n  \"user_lastname\": \"Smith\",\n  \"email\": \"jane@example.com\",\n  \"user_country\": \"AU\",\n  \"ip\": \"203.0.113.10\",\n  \"receiver_fullname\": \"John Doe\",\n  \"receiver_country\": \"US\",\n  \"payment_mode\": \"bank_transfer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Process a transaction (AML risk decision)\n\nRequires the Transaction Monitoring capability. `X-Account-Id` must equal the account the API key belongs to."
          }
        }
      ]
    },
    {
      "name": "Step-Up Authentication",
      "item": [
        {
          "name": "Create a step-up challenge",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/api/v1/step-up/challenges",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "api",
                "v1",
                "step-up",
                "challenges"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subjectId\": \"customer-8a3f7b12\",\n  \"riskReason\": \"high_value_txn\",\n  \"channelOrigin\": \"mobile_android\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a step-up challenge\n\nx-api-key only. The subject must have completed a liveness-verified KYC session."
          }
        },
        {
          "name": "Begin the liveness check (native integration)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/api/v1/step-up/challenges/:challengeId/begin-liveness",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "api",
                "v1",
                "step-up",
                "challenges",
                ":challengeId",
                "begin-liveness"
              ],
              "variable": [
                {
                  "key": "challengeId",
                  "value": ""
                }
              ]
            },
            "description": "Begin the liveness check (native integration)"
          }
        },
        {
          "name": "Complete the challenge",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "x-api-key",
                "value": "{{apiKey}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/kycintegration/api/v1/step-up/challenges/:challengeId/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "kycintegration",
                "api",
                "v1",
                "step-up",
                "challenges",
                ":challengeId",
                "complete"
              ],
              "variable": [
                {
                  "key": "challengeId",
                  "value": ""
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"livenessSessionId\": \"LIVENESS_SESSION_ID\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Complete the challenge"
          }
        }
      ]
    },
    {
      "name": "Device Intelligence",
      "item": [
        {
          "name": "Create a device session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/aml-intelligence/api/v1/device/sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "aml-intelligence",
                "api",
                "v1",
                "device",
                "sessions"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"integration_id\": \"YOUR_INTEGRATION_UUID\",\n  \"signals\": {\n    \"platform\": \"web\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a device session\n\nAnonymous (called from the browser by the Device SDK); attribution is by integration_id. Pass the returned token as `session` when you submit the transaction."
          }
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.skylinefare.com"
    },
    {
      "key": "apiKey",
      "value": "YOUR_API_KEY"
    },
    {
      "key": "integrationId",
      "value": "YOUR_INTEGRATION_UUID"
    },
    {
      "key": "accountId",
      "value": "YOUR_ACCOUNT_ID"
    },
    {
      "key": "sessionBearer",
      "value": ""
    }
  ]
}
