Postman Collections

Example Postman collections for v2 — index, request order, and importable JSON

Use the Fourthline Postman collections to explore and test the Apis v2.

Before you begin

Before using the collections, ensure you have:

  • API credentials
  • A configured callback endpoint
  • Access to the appropriate Fourthline environment

How to import a collection

  1. Hover over the top-right corner of the code block and select Copy.
  2. Open Postman.
  3. Select Import.
  4. Paste the copied JSON.
  5. Configure the collection variables.
  6. Run Create access token first.

Configure collection variables

Before running the collection, replace all collection variables with values from your environment.

File upload requests are provided without sample files. Before sending an upload request, select the appropriate file in Postman.

VariableDescription
baseUrlAPI base URL
client_idYour API client ID
client_secretYour API client secret
partnerClientIdYour client reference ID
workflowIdReturned by Create workflow
clientIdReturned by Create workflow
documentIdDocument ID returned by QES signature details
otpSigning OTP. In sandbox, retrieve this with Get signature OTP

Typical request order

Most API collections follow this order:

StepRequest
1Create access token
2Create workflow
3Upload client data
4Upload client documents
5Start workflow
6Get workflow status
7Retrieve reports or continue product-specific steps

For QES workflows, continue with:

StepRequest
8Get signature details
9Authorize signature
10Get signature OTP, sandbox only
11Re-send OTP, only if needed
12Confirm signature
13Get signature report / signed PDFs

Collections

Identity Verification integration


{
  "info": {
    "_postman_id": "9b8e5930-7a72-423e-8622-c04efe5df02b",
    "name": "Fourthline - Identity Verification",
    "description": "Customer-facing Postman collection for Identity Verification workflows. Includes API, Mobile SDK, and Web SDK paths with reusable variables and sanitized sample data.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "API Integration",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{idvWorkflow}}\",\n  \"partnerClientId\": \"{{partnerClientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Identity Data",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}"
              ]
            },
            "description": "Uploads client identity data when required by the workflow configuration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"partnerClientId\": \"{{partnerClientId}}\",\n  \"identityData\": {\n    \"type\": \"IdentityData\",\n    \"PersonalData\": {\n      \"FirstName\": \"{{firstName}}\",\n      \"LastName\": \"{{lastName}}\",\n      \"Gender\": \"{{gender}}\",\n      \"PlaceOfBirth\": \"{{placeOfBirth}}\",\n      \"CountryOfBirth\": \"{{countryOfBirth}}\",\n      \"BirthDate\": \"{{birthDate}}\",\n      \"Nationality\": \"{{nationality}}\"\n    },\n    \"Address\": {\n      \"StreetName\": \"{{streetName}}\",\n      \"StreetNumber\": \"{{streetNumber}}\",\n      \"City\": \"{{city}}\",\n      \"Country\": \"{{country}}\",\n      \"PostalCode\": \"{{postalCode}}\"\n    },\n    \"ContactDetails\": {\n      \"Email\": \"{{email}}\",\n      \"Phone\": \"{{phone}}\",\n      \"Mobile\": \"{{mobilePhone}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Selfie Image",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload a selfie file. Select the file manually in Postman before sending the request.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"id\": \"{{documentId}}\",\n  \"name\": \"Selfie image\",\n  \"side\": \"Front\",\n  \"type\": \"SelfieImage\",\n  \"location\": {\n    \"latitude\": \"{{latitude}}\",\n    \"longitude\": \"{{longitude}}\"\n  }\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Document Front",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload an identity document image. Select the file manually in Postman before sending the request.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"documentId\": \"{{documentId}}\",\n  \"id\": \"{{documentFrontId}}\",\n  \"name\": \"Document Front\",\n  \"side\": \"Front\",\n  \"type\": \"DocumentImage\",\n  \"issuingCountry\": \"{{issuingCountry}}\",\n  \"documentType\": \"{{documentType}}\",\n  \"documentNumber\": \"{{documentNumber}}\",\n  \"issueDate\": \"{{issueDate}}\",\n  \"expirationDate\": \"{{expirationDate}}\",\n  \"location\": {\n    \"latitude\": \"{{latitude}}\",\n    \"longitude\": \"{{longitude}}\"\n  }\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Document Back",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload an identity document image. Select the file manually in Postman before sending the request.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"documentId\": \"{{documentId}}\",\n  \"id\": \"{{documentBackId}}\",\n  \"name\": \"Document Back\",\n  \"side\": \"Back\",\n  \"type\": \"DocumentImage\",\n  \"issuingCountry\": \"{{issuingCountry}}\",\n  \"documentType\": \"{{documentType}}\",\n  \"documentNumber\": \"{{documentNumber}}\",\n  \"issueDate\": \"{{issueDate}}\",\n  \"expirationDate\": \"{{expirationDate}}\",\n  \"location\": {\n    \"latitude\": \"{{latitude}}\",\n    \"longitude\": \"{{longitude}}\"\n  }\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get ZIP Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/zip",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "zip"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get PDF Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/pdf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "pdf"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get XML Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/xml",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "xml"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get Client Details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/clients/{{clientId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "clients",
                "{{clientId}}"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Mobile SDK",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{idvWorkflow}}\",\n  \"partnerClientId\": \"{{partnerClientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Create SDK Session (Mobile)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/validationcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "validationcode"
              ]
            },
            "description": "Creates a single-use validation code for the SDK. Pass validationCode from your backend to the SDK.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"target\": \"Mobile\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('SDK session created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.validationCode) pm.collectionVariables.set('validationCode', jsonData.validationCode);"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Web SDK",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{idvWorkflow}}\",\n  \"partnerClientId\": \"{{partnerClientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Create SDK Session (Web)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/validationcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "validationcode"
              ]
            },
            "description": "Creates a single-use validation code for the SDK. Pass validationCode from your backend to the SDK.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"target\": \"Web\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('SDK session created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.validationCode) pm.collectionVariables.set('validationCode', jsonData.validationCode);"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.example.com",
      "type": "string"
    },
    {
      "key": "client_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "client_secret",
      "value": "",
      "type": "string"
    },
    {
      "key": "access_token",
      "value": "",
      "type": "string"
    },
    {
      "key": "partnerClientId",
      "value": "partner-client-001",
      "type": "string"
    },
    {
      "key": "clientId",
      "value": "",
      "type": "string"
    },
    {
      "key": "workflowId",
      "value": "",
      "type": "string"
    },
    {
      "key": "validationCode",
      "value": "",
      "type": "string"
    },
    {
      "key": "documentId",
      "value": "document-001",
      "type": "string"
    },
    {
      "key": "latitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "longitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "firstName",
      "value": "Jane",
      "type": "string"
    },
    {
      "key": "lastName",
      "value": "Doe",
      "type": "string"
    },
    {
      "key": "gender",
      "value": "Female",
      "type": "string"
    },
    {
      "key": "placeOfBirth",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "countryOfBirth",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "birthDate",
      "value": "1990-01-01T00:00:00+01:00",
      "type": "string"
    },
    {
      "key": "nationality",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "streetName",
      "value": "Sample Street",
      "type": "string"
    },
    {
      "key": "streetNumber",
      "value": "1",
      "type": "string"
    },
    {
      "key": "city",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "country",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "postalCode",
      "value": "1000 AA",
      "type": "string"
    },
    {
      "key": "email",
      "value": "[email protected]",
      "type": "string"
    },
    {
      "key": "phone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "mobilePhone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "issuingCountry",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "documentType",
      "value": "NationalIDCard",
      "type": "string"
    },
    {
      "key": "documentNumber",
      "value": "DOCUMENT-NUMBER",
      "type": "string"
    },
    {
      "key": "issueDate",
      "value": "2020-01-01",
      "type": "string"
    },
    {
      "key": "expirationDate",
      "value": "2030-01-01",
      "type": "string"
    },
    {
      "key": "documentFrontId",
      "value": "document-front-001",
      "type": "string"
    },
    {
      "key": "documentBackId",
      "value": "document-back-001",
      "type": "string"
    },
    {
      "key": "idvWorkflow",
      "value": "IdvWorkflow",
      "type": "string"
    }
  ]
}

Biometric Authentication integration


{
  "info": {
    "_postman_id": "1b288b22-487e-43b7-8fd4-b0abf193b54b",
    "name": "Fourthline - Biometric Authentication",
    "description": "Customer-facing Postman collection for Biometric Authentication workflows. Sanitized from the internal WorkflowV2 collection: no QA IDs, local file paths, duplicate test requests, or internal comments.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "API Integration",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{biometricWorkflow}}\",\n  \"partnerClientId\": \"{{partnerClientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Selfie Image",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload a selfie file. Select the file manually in Postman before sending the request.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"id\": \"{{documentId}}\",\n  \"name\": \"Selfie image\",\n  \"side\": \"Front\",\n  \"type\": \"SelfieImage\",\n  \"location\": {\n    \"latitude\": \"{{latitude}}\",\n    \"longitude\": \"{{longitude}}\"\n  }\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Reference Selfie Image",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload a selfie file. Select the file manually in Postman before sending the request.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"id\": \"{{documentId}}\",\n  \"name\": \"Selfie image\",\n  \"side\": \"Front\",\n  \"type\": \"ReferenceSelfieImage\",\n  \"location\": {\n    \"latitude\": \"{{latitude}}\",\n    \"longitude\": \"{{longitude}}\"\n  }\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get ZIP Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/zip",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "zip"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get PDF Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/pdf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "pdf"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get XML Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/xml",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "xml"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get Client Details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/clients/{{clientId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "clients",
                "{{clientId}}"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Mobile SDK",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{biometricWorkflow}}\",\n  \"clientId\": \"{{clientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Create SDK Session (Mobile)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/validationcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "validationcode"
              ]
            },
            "description": "Creates a single-use validation code for the SDK. Pass validationCode from your backend to the SDK.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"target\": \"Mobile\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('SDK session created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.validationCode) pm.collectionVariables.set('validationCode', jsonData.validationCode);"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Web SDK",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{biometricWorkflow}}\",\n  \"clientId\": \"{{clientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Create SDK Session (Web)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/validationcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "validationcode"
              ]
            },
            "description": "Creates a single-use validation code for the SDK. Pass validationCode from your backend to the SDK.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"target\": \"Web\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('SDK session created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.validationCode) pm.collectionVariables.set('validationCode', jsonData.validationCode);"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get workflow status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.example.com",
      "type": "string"
    },
    {
      "key": "client_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "client_secret",
      "value": "",
      "type": "string"
    },
    {
      "key": "access_token",
      "value": "",
      "type": "string"
    },
    {
      "key": "partnerClientId",
      "value": "partner-client-001",
      "type": "string"
    },
    {
      "key": "clientId",
      "value": "",
      "type": "string"
    },
    {
      "key": "workflowId",
      "value": "",
      "type": "string"
    },
    {
      "key": "validationCode",
      "value": "",
      "type": "string"
    },
    {
      "key": "documentId",
      "value": "document-001",
      "type": "string"
    },
    {
      "key": "latitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "longitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "firstName",
      "value": "Jane",
      "type": "string"
    },
    {
      "key": "lastName",
      "value": "Doe",
      "type": "string"
    },
    {
      "key": "gender",
      "value": "Female",
      "type": "string"
    },
    {
      "key": "placeOfBirth",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "countryOfBirth",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "birthDate",
      "value": "1990-01-01T00:00:00+01:00",
      "type": "string"
    },
    {
      "key": "nationality",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "streetName",
      "value": "Sample Street",
      "type": "string"
    },
    {
      "key": "streetNumber",
      "value": "1",
      "type": "string"
    },
    {
      "key": "city",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "country",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "postalCode",
      "value": "1000 AA",
      "type": "string"
    },
    {
      "key": "email",
      "value": "[email protected]",
      "type": "string"
    },
    {
      "key": "phone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "mobilePhone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "issuingCountry",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "documentType",
      "value": "NationalIDCard",
      "type": "string"
    },
    {
      "key": "documentNumber",
      "value": "DOCUMENT-NUMBER",
      "type": "string"
    },
    {
      "key": "issueDate",
      "value": "2020-01-01",
      "type": "string"
    },
    {
      "key": "expirationDate",
      "value": "2030-01-01",
      "type": "string"
    },
    {
      "key": "documentFrontId",
      "value": "document-front-001",
      "type": "string"
    },
    {
      "key": "documentBackId",
      "value": "document-back-001",
      "type": "string"
    },
    {
      "key": "biometricWorkflow",
      "value": "BiometricsOnly",
      "type": "string"
    }
  ]
}

Qualified Electronic Signature integration

{
  "info": {
    "_postman_id": "046b7e3d-0407-4edb-a469-b994c86da886",
    "name": "Fourthline - Qualified Electronic Signature (QES)",
    "description": "Customer-facing Postman collection for QES workflows. Cleaned into an end-to-end signing journey with placeholders instead of internal test values.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "QES Workflow",
      "item": [
        {
          "name": "Get Access Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Access token created', function () { pm.expect(pm.response.code).to.eql(200); });",
                  "const jsonData = pm.response.json();",
                  "pm.collectionVariables.set('access_token', jsonData.access_token);"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "grant_type",
                  "value": "client_credentials",
                  "type": "text"
                },
                {
                  "key": "client_id",
                  "value": "{{client_id}}",
                  "type": "text"
                },
                {
                  "key": "client_secret",
                  "value": "{{client_secret}}",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/v1/oauth2/token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "oauth2",
                "token"
              ]
            }
          }
        },
        {
          "name": "Create Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows"
              ]
            },
            "description": "Creates a workflow. Provide either partnerClientId or clientId, depending on your integration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workflow\": \"{{qesWorkflow}}\",\n  \"partnerClientId\": \"{{partnerClientId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Workflow created', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });",
                  "const jsonData = pm.response.json();",
                  "if (jsonData.workflowId) pm.collectionVariables.set('workflowId', jsonData.workflowId);",
                  "if (jsonData.clientId) pm.collectionVariables.set('clientId', jsonData.clientId);"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Document To Sign",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}/data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}",
                "data"
              ]
            },
            "description": "Upload the document that the client must sign. Confirm the required document type and metadata for your Hub workflow.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "metadata",
                  "value": "{\n  \"id\": \"{{documentToSignId}}\",\n  \"name\": \"Document to sign\",\n  \"type\": \"DocumentToSign\"\n}",
                  "type": "text"
                },
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Upload Mobile Phone Number",
          "request": {
            "method": "PATCH",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/clients/{{clientId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "clients",
                "{{clientId}}"
              ]
            },
            "description": "Uploads the mobile phone number used by QES when required by your workflow configuration.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"identityData\": {\n    \"ContactDetails\": {\n      \"Mobile\": \"{{mobilePhone}}\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Start Workflow",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "start"
              ]
            },
            "description": "Start only after all required data and files have been provided.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get Signature Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "status"
              ]
            },
            "description": "Check the workflow status and signature-related product status/messages.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Get JSON Report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report"
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        },
        {
          "name": "Download Signed Documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v2/workflows/{{workflowId}}/report/zip",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v2",
                "workflows",
                "{{workflowId}}",
                "report",
                "zip"
              ]
            },
            "description": "Download the report ZIP that contains signed documents when configured for the workflow.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('Request succeeded', function () {",
                  "  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202, 204]);",
                  "});"
                ]
              }
            }
          ]
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.example.com",
      "type": "string"
    },
    {
      "key": "client_id",
      "value": "",
      "type": "string"
    },
    {
      "key": "client_secret",
      "value": "",
      "type": "string"
    },
    {
      "key": "access_token",
      "value": "",
      "type": "string"
    },
    {
      "key": "partnerClientId",
      "value": "partner-client-001",
      "type": "string"
    },
    {
      "key": "clientId",
      "value": "",
      "type": "string"
    },
    {
      "key": "workflowId",
      "value": "",
      "type": "string"
    },
    {
      "key": "validationCode",
      "value": "",
      "type": "string"
    },
    {
      "key": "documentId",
      "value": "document-001",
      "type": "string"
    },
    {
      "key": "latitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "longitude",
      "value": "",
      "type": "string"
    },
    {
      "key": "firstName",
      "value": "Jane",
      "type": "string"
    },
    {
      "key": "lastName",
      "value": "Doe",
      "type": "string"
    },
    {
      "key": "gender",
      "value": "Female",
      "type": "string"
    },
    {
      "key": "placeOfBirth",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "countryOfBirth",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "birthDate",
      "value": "1990-01-01T00:00:00+01:00",
      "type": "string"
    },
    {
      "key": "nationality",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "streetName",
      "value": "Sample Street",
      "type": "string"
    },
    {
      "key": "streetNumber",
      "value": "1",
      "type": "string"
    },
    {
      "key": "city",
      "value": "Amsterdam",
      "type": "string"
    },
    {
      "key": "country",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "postalCode",
      "value": "1000 AA",
      "type": "string"
    },
    {
      "key": "email",
      "value": "[email protected]",
      "type": "string"
    },
    {
      "key": "phone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "mobilePhone",
      "value": "+31000000000",
      "type": "string"
    },
    {
      "key": "issuingCountry",
      "value": "NLD",
      "type": "string"
    },
    {
      "key": "documentType",
      "value": "NationalIDCard",
      "type": "string"
    },
    {
      "key": "documentNumber",
      "value": "DOCUMENT-NUMBER",
      "type": "string"
    },
    {
      "key": "issueDate",
      "value": "2020-01-01",
      "type": "string"
    },
    {
      "key": "expirationDate",
      "value": "2030-01-01",
      "type": "string"
    },
    {
      "key": "documentFrontId",
      "value": "document-front-001",
      "type": "string"
    },
    {
      "key": "documentBackId",
      "value": "document-back-001",
      "type": "string"
    },
    {
      "key": "qesWorkflow",
      "value": "QesWorkflow",
      "type": "string"
    },
    {
      "key": "documentToSignId",
      "value": "document-to-sign-001",
      "type": "string"
    }
  ]
}