{"info":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","description":"<html><head></head><body><h1 id=\"about\">About</h1>\n<p>This collection provides a suite of <strong>services</strong> powered by the <a href=\"https://carefluence.com\">Carefluence FlowOps DataService</a> gateway. It enables identity, contact, credit, and debit order optimisation checks for South African individuals using their national identity number.</p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>All requests use <strong>OAuth 2.0 Client Credentials</strong> flow. The access token is automatically fetched and attached as a Bearer token in the <code>Authorization</code> header using the following environment variables:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{OpenIDServer}}</code></td>\n<td>OpenID Connect server base URL</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientID}}</code></td>\n<td>OAuth2 client ID</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientSecret}}</code></td>\n<td>OAuth2 client secret</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientScope}}</code></td>\n<td>Requested OAuth2 scope</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"base-url\">Base URL</h2>\n<p>All requests are sent to:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{FHIRopsBaseURL}}/DataService\n\n</code></pre><h2 id=\"request-format\">Request Format</h2>\n<p>All requests are <code>POST</code> with a JSON body containing the subject's South African identity number:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"identityNumber\": \"{{ID1}}\"\n}\n\n</code></pre>\n<h2 id=\"available-services\">Available Services</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Service</th>\n<th>Connector Code</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>ID Verification</td>\n<td><code>IDVerify</code></td>\n<td>Verifies identity against the South African Home Affairs HANIS/NPR register</td>\n</tr>\n<tr>\n<td>Contact Verification</td>\n<td><code>SA_CONTACT_VERIFY</code></td>\n<td>Retrieves verified contact details, addresses, and employment history</td>\n</tr>\n<tr>\n<td>Credit Score</td>\n<td><code>SA_CREDIT_VERIFY_IN</code></td>\n<td>Returns a credit score and risk rating for the individual</td>\n</tr>\n<tr>\n<td>Strike Date Service</td>\n<td><code>STRIKE_DATE_HTTP_001</code></td>\n<td>Recommends optimal debit order collection dates based on income patterns</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"visualizer\">Visualizer</h2>\n<p>Each request includes a <strong>Postman Visualizer</strong> script that renders the response as a styled HTML card or table directly in the Postman response panel, making results easy to read at a glance.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"About","slug":"about"}],"owner":"6150292","collectionId":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","publishedId":"2sBXcGDf44","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-02-24T16:42:20.000Z"},"item":[{"name":"Verification API","item":[{"name":"ID Verification","event":[{"listen":"test","script":{"id":"8787fc17-d385-4ba1-aff3-44ff74ef03d0","exec":["","","// Identity Verification Document Visualizer","var template = `","<style>","    * {","        margin: 0;","        padding: 0;","        box-sizing: border-box;","    }","    body {","        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;","        background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);","        min-height: 100vh;","        padding: 20px;","    }","    .document-container {","        max-width: 800px;","        margin: 0 auto;","        background: white;","        border-radius: 16px;","        box-shadow: 0 10px 40px rgba(0,0,0,0.15);","        overflow: hidden;","    }","    .header {","        background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);","        color: white;","        padding: 24px 32px;","        text-align: center;","    }","    .header h1 {","        font-size: 24px;","        font-weight: 600;","        letter-spacing: 1px;","        text-transform: uppercase;","    }","    .header .subtitle {","        font-size: 12px;","        opacity: 0.8;","        margin-top: 6px;","        letter-spacing: 2px;","    }","    .content {","        padding: 32px;","    }","    .profile-section {","        display: flex;","        gap: 32px;","        margin-bottom: 32px;","        padding-bottom: 32px;","        border-bottom: 2px solid #eef2f7;","    }","    .photo-container {","        flex-shrink: 0;","    }","    .photo {","        width: 160px;","        height: 200px;","        object-fit: cover;","        border-radius: 12px;","        border: 4px solid #eef2f7;","        box-shadow: 0 4px 15px rgba(0,0,0,0.1);","    }","    .primary-info {","        flex-grow: 1;","        display: flex;","        flex-direction: column;","        justify-content: center;","    }","    .full-name {","        font-size: 28px;","        font-weight: 700;","        color: #1e3c72;","        margin-bottom: 8px;","    }","    .id-number {","        font-size: 18px;","        color: #5a6c7d;","        font-family: 'Courier New', monospace;","        background: #f8fafc;","        padding: 10px 16px;","        border-radius: 8px;","        display: inline-block;","        border-left: 4px solid #2a5298;","    }","    .id-label {","        font-size: 11px;","        color: #8896a4;","        text-transform: uppercase;","        letter-spacing: 1px;","        margin-bottom: 4px;","    }","    .details-grid {","        display: grid;","        grid-template-columns: repeat(2, 1fr);","        gap: 16px;","        margin-bottom: 24px;","    }","    .detail-card {","        background: #f8fafc;","        padding: 16px 20px;","        border-radius: 10px;","        border-left: 4px solid #3b82f6;","    }","    .detail-label {","        font-size: 11px;","        color: #8896a4;","        text-transform: uppercase;","        letter-spacing: 1px;","        margin-bottom: 6px;","    }","    .detail-value {","        font-size: 16px;","        color: #1e293b;","        font-weight: 600;","    }","    .registration-section {","        background: #f0f9ff;","        padding: 20px;","        border-radius: 12px;","        margin-bottom: 24px;","    }","    .registration-title {","        font-size: 14px;","        color: #1e3c72;","        font-weight: 600;","        margin-bottom: 16px;","        text-transform: uppercase;","        letter-spacing: 1px;","    }","    .registration-grid {","        display: flex;","        gap: 24px;","    }","    .registration-item {","        display: flex;","        align-items: center;","        gap: 10px;","    }","    .registration-badge {","        width: 32px;","        height: 32px;","        border-radius: 50%;","        display: flex;","        align-items: center;","        justify-content: center;","        font-weight: bold;","        font-size: 12px;","    }","    .badge-yes {","        background: #dcfce7;","        color: #166534;","    }","    .badge-no {","        background: #fee2e2;","        color: #991b1b;","    }","    .registration-label {","        font-size: 14px;","        color: #475569;","    }","    .hanis-ref {","        margin-top: 12px;","        font-size: 12px;","        color: #64748b;","    }","    .hanis-ref span {","        font-family: 'Courier New', monospace;","        background: white;","        padding: 4px 8px;","        border-radius: 4px;","    }","    .status-section {","        text-align: center;","        padding: 24px;","        border-radius: 12px;","    }","    .status-success {","        background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);","        border: 2px solid #86efac;","    }","    .status-error {","        background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);","        border: 2px solid #fca5a5;","    }","    .status-badge {","        display: inline-flex;","        align-items: center;","        gap: 10px;","        padding: 12px 24px;","        border-radius: 50px;","        font-size: 16px;","        font-weight: 600;","    }","    .status-success .status-badge {","        background: #166534;","        color: white;","    }","    .status-error .status-badge {","        background: #991b1b;","        color: white;","    }","    .status-icon {","        font-size: 20px;","    }","    .status-message {","        margin-top: 12px;","        font-size: 14px;","        color: #475569;","    }","    .footer {","        text-align: center;","        padding: 16px;","        background: #f8fafc;","        font-size: 11px;","        color: #94a3b8;","    }","</style>","","<div class=\"document-container\">","    <div class=\"header\">","        <h1>Identity Verification Document</h1>","        <div class=\"subtitle\">Official Verification Record</div>","    </div>","    ","    <div class=\"content\">","        <div class=\"profile-section\">","            <div class=\"photo-container\">","                <img class=\"photo\" src=\"data:image/jpeg;base64,{{photo}}\" alt=\"ID Photo\">","            </div>","            <div class=\"primary-info\">","                <div class=\"full-name\">{{fullName}}</div>","                <div class=\"id-label\">Identity Number</div>","                <div class=\"id-number\">{{identityNumber}}</div>","            </div>","        </div>","        ","        <div class=\"details-grid\">","            <div class=\"detail-card\">","                <div class=\"detail-label\">Marital Status</div>","                <div class=\"detail-value\">{{maritalStatus}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">Date of Marriage</div>","                <div class=\"detail-value\">{{dateOfMarriage}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">Country of Birth</div>","                <div class=\"detail-value\">{{countryOfBirth}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">Deceased Status</div>","                <div class=\"detail-value\">{{deceasedStatus}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">Smart Card Issued</div>","                <div class=\"detail-value\">{{smartCardIssued}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">ID Issue Date</div>","                <div class=\"detail-value\">{{idIssueDate}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">ID Blocked Status</div>","                <div class=\"detail-value\">{{idNumberBlocked}}</div>","            </div>","            <div class=\"detail-card\">","                <div class=\"detail-label\">Request Identifier</div>","                <div class=\"detail-value\" style=\"font-size: 11px; font-family: monospace;\">{{requestIdentifier}}</div>","            </div>","        </div>","        ","        <div class=\"registration-section\">","            <div class=\"registration-title\">Registration Status</div>","            <div class=\"registration-grid\">","                <div class=\"registration-item\">","                    <div class=\"registration-badge {{hanisClass}}\">{{onHANIS}}</div>","                    <div class=\"registration-label\">HANIS Registration</div>","                </div>","                <div class=\"registration-item\">","                    <div class=\"registration-badge {{nprClass}}\">{{onNPR}}</div>","                    <div class=\"registration-label\">NPR Registration</div>","                </div>","            </div>","            {{#if hanisReference}}","            <div class=\"hanis-ref\">HANIS Reference: <span>{{hanisReference}}</span></div>","            {{/if}}","        </div>","        ","        <div class=\"status-section {{statusClass}}\">","            <div class=\"status-badge\">","                <span class=\"status-icon\">{{statusIcon}}</span>","                <span>{{statusText}}</span>","            </div>","            <div class=\"status-message\">{{responseMessage}}</div>","        </div>","    </div>","    ","    <div class=\"footer\">","        Response Code: {{responseCode}} | Generated by Carefluence Verification Service","    </div>","</div>","`;","","function formatDate(dateStr) {","    if (!dateStr || dateStr.length !== 8) return dateStr || 'N/A';","    return dateStr.substring(0, 4) + '-' + dateStr.substring(4, 6) + '-' + dateStr.substring(6, 8);","}","","function constructVisualizerPayload() {","    var data = pm.response.json();","    var isSuccess = data.responseCode === 'BV-IVS-00000';","    ","    return {","        photo: data.photo || '',","        fullName: (data.name || '') + ' ' + (data.surname || ''),","        identityNumber: data.identityNumber || 'N/A',","        maritalStatus: data.maritalStatus || 'N/A',","        dateOfMarriage: formatDate(data.dateOfMarriage),","        countryOfBirth: data.countryOfBirth || 'N/A',","        deceasedStatus: data.deceasedStatus || 'N/A',","        smartCardIssued: data.smartCardIssued || 'N/A',","        idIssueDate: formatDate(data.idIssueDate),","        idNumberBlocked: data.idNumberBlocked || 'N/A',","        requestIdentifier: data.requestIdentifier || 'N/A',","        onHANIS: data.onHANIS || 'No',","        onNPR: data.onNPR || 'No',","        hanisClass: data.onHANIS === 'Yes' ? 'badge-yes' : 'badge-no',","        nprClass: data.onNPR === 'Yes' ? 'badge-yes' : 'badge-no',","        hanisReference: data.hanisReference || '',","        responseCode: data.responseCode || 'N/A',","        responseMessage: data.responseMessage || 'N/A',","        statusClass: isSuccess ? 'status-success' : 'status-error',","        statusIcon: isSuccess ? '✓' : '✗',","        statusText: isSuccess ? 'VERIFIED' : 'VERIFICATION FAILED'","    };","}","","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"ecfd274e-4688-4f25-965d-538460d61f51","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"identityNumber\":\"{{ID1}}\"}","options":{"raw":{"language":"json"}}},"url":"{{FHIRopsBaseURL}}/DataService?connectorCode=IDVerify","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","type":"collection"}},"urlObject":{"path":["DataService"],"host":["{{FHIRopsBaseURL}}"],"query":[{"key":"connectorCode","value":"IDVerify"}],"variable":[]}},"response":[],"_postman_id":"ecfd274e-4688-4f25-965d-538460d61f51"},{"name":"Contact Verification","event":[{"listen":"test","script":{"id":"8787fc17-d385-4ba1-aff3-44ff74ef03d0","exec":["// Identity Verification Data Table Visualizer","var template = `","<style>","    * {","        margin: 0;","        padding: 0;","        box-sizing: border-box;","    }","    body {","        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;","        background: #f5f7fa;","        padding: 20px;","    }","    .container {","        max-width: 900px;","        margin: 0 auto;","    }","    .header {","        background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);","        color: white;","        padding: 20px;","        border-radius: 8px 8px 0 0;","        text-align: center;","    }","    .header h1 {","        font-size: 22px;","        font-weight: 600;","    }","    .section {","        background: white;","        margin-bottom: 16px;","        border-radius: 8px;","        box-shadow: 0 2px 8px rgba(0,0,0,0.1);","        overflow: hidden;","    }","    .section-title {","        background: #2a5298;","        color: white;","        padding: 12px 16px;","        font-size: 14px;","        font-weight: 600;","        text-transform: uppercase;","        letter-spacing: 1px;","    }","    .identity-info {","        padding: 20px;","        display: grid;","        grid-template-columns: repeat(3, 1fr);","        gap: 16px;","    }","    .info-item {","        text-align: center;","        padding: 12px;","        background: #f8fafc;","        border-radius: 6px;","    }","    .info-label {","        font-size: 11px;","        color: #64748b;","        text-transform: uppercase;","        letter-spacing: 1px;","        margin-bottom: 6px;","    }","    .info-value {","        font-size: 16px;","        font-weight: 600;","        color: #1e3c72;","    }","    table {","        width: 100%;","        border-collapse: collapse;","    }","    th {","        background: #f1f5f9;","        padding: 12px 16px;","        text-align: left;","        font-size: 12px;","        font-weight: 600;","        color: #475569;","        text-transform: uppercase;","        letter-spacing: 0.5px;","        border-bottom: 2px solid #e2e8f0;","    }","    td {","        padding: 12px 16px;","        border-bottom: 1px solid #e2e8f0;","        font-size: 14px;","        color: #334155;","    }","    tr:hover {","        background: #f8fafc;","    }","    .no-data {","        padding: 20px;","        text-align: center;","        color: #94a3b8;","        font-style: italic;","    }","    .response-message {","        padding: 16px;","        background: #fef3c7;","        color: #92400e;","        text-align: center;","        font-weight: 500;","    }","</style>","","<div class=\"container\">","    <div class=\"header\">","        <h1>Contact Verification Results</h1>","    </div>","    ","    <div class=\"section\">","        <div class=\"section-title\">Personal Information</div>","        <div class=\"identity-info\">","            <div class=\"info-item\">","                <div class=\"info-label\">First Name</div>","                <div class=\"info-value\">{{name}}</div>","            </div>","            <div class=\"info-item\">","                <div class=\"info-label\">Surname</div>","                <div class=\"info-value\">{{surname}}</div>","            </div>","            <div class=\"info-item\">","                <div class=\"info-label\">Identity Number</div>","                <div class=\"info-value\">{{identityNumber}}</div>","            </div>","        </div>","    </div>","","    {{#if hasResponseMessage}}","    <div class=\"section\">","        <div class=\"response-message\">{{responseMessage}}</div>","    </div>","    {{/if}}","","    <div class=\"section\">","        <div class=\"section-title\">Home Phone Numbers</div>","        {{#if hasHomeNumbers}}","        <table>","            <tr>","                <th>Number</th>","                <th>Date</th>","            </tr>","            {{#each homeNumbers}}","            <tr>","                <td>{{number}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No home numbers on record</div>","        {{/if}}","    </div>","","    <div class=\"section\">","        <div class=\"section-title\">Work Phone Numbers</div>","        {{#if hasWorkNumbers}}","        <table>","            <tr>","                <th>Number</th>","                <th>Date</th>","            </tr>","            {{#each workNumbers}}","            <tr>","                <td>{{number}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No work numbers on record</div>","        {{/if}}","    </div>","","    <div class=\"section\">","        <div class=\"section-title\">Mobile Phone Numbers</div>","        {{#if hasMobileNumbers}}","        <table>","            <tr>","                <th>Number</th>","                <th>Date</th>","            </tr>","            {{#each mobileNumbers}}","            <tr>","                <td>{{number}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No mobile numbers on record</div>","        {{/if}}","    </div>","","    <div class=\"section\">","        <div class=\"section-title\">Addresses</div>","        {{#if hasAddresses}}","        <table>","            <tr>","                <th>Address Line 1</th>","                <th>Address Line 2</th>","                <th>Suburb</th>","                <th>Town</th>","                <th>Code</th>","                <th>Date</th>","            </tr>","            {{#each addresses}}","            <tr>","                <td>{{addressLine1}}</td>","                <td>{{addressLine2}}</td>","                <td>{{suburb}}</td>","                <td>{{town}}</td>","                <td>{{code}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No addresses on record</div>","        {{/if}}","    </div>","","    <div class=\"section\">","        <div class=\"section-title\">Email Addresses</div>","        {{#if hasEmailAddresses}}","        <table>","            <tr>","                <th>Email</th>","                <th>Date</th>","            </tr>","            {{#each emailAddresses}}","            <tr>","                <td>{{email}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No email addresses on record</div>","        {{/if}}","    </div>","","    <div class=\"section\">","        <div class=\"section-title\">Employment History</div>","        {{#if hasEmployers}}","        <table>","            <tr>","                <th>Employer</th>","                <th>Title</th>","                <th>Date</th>","            </tr>","            {{#each employers}}","            <tr>","                <td>{{employer}}</td>","                <td>{{title}}</td>","                <td>{{formattedDate}}</td>","            </tr>","            {{/each}}","        </table>","        {{else}}","        <div class=\"no-data\">No employment history on record</div>","        {{/if}}","    </div>","</div>","`;","","function formatDate(dateStr) {","    if (!dateStr || dateStr.length !== 8) return dateStr || 'N/A';","    var year = dateStr.substring(0, 4);","    var month = dateStr.substring(4, 6);","    var day = dateStr.substring(6, 8);","    return year + '-' + month + '-' + day;","}","","function createPayload() {","    var response = pm.response.json();","    ","    var homeNumbers = (response.homeNumbers || []).map(function(item) {","        return {","            number: item.number || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    var workNumbers = (response.workNumbers || []).map(function(item) {","        return {","            number: item.number || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    var mobileNumbers = (response.mobileNumbers || []).map(function(item) {","        return {","            number: item.number || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    var addresses = (response.addresses || []).map(function(item) {","        return {","            addressLine1: item.addressLine1 || 'N/A',","            addressLine2: item.addressLine2 || 'N/A',","            suburb: item.suburb || 'N/A',","            town: item.town || 'N/A',","            code: item.code || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    var emailAddresses = (response.emailAddresses || []).map(function(item) {","        return {","            email: item.email || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    var employers = (response.employers || []).map(function(item) {","        return {","            employer: item.employer || 'N/A',","            title: item.title || 'N/A',","            formattedDate: formatDate(item.date)","        };","    });","    ","    return {","        name: response.name || 'N/A',","        surname: response.surname || 'N/A',","        identityNumber: response.identityNumber || 'N/A',","        responseMessage: response.responseMessage || '',","        hasResponseMessage: response.responseMessage && response.responseMessage.length > 0,","        homeNumbers: homeNumbers,","        hasHomeNumbers: homeNumbers.length > 0,","        workNumbers: workNumbers,","        hasWorkNumbers: workNumbers.length > 0,","        mobileNumbers: mobileNumbers,","        hasMobileNumbers: mobileNumbers.length > 0,","        addresses: addresses,","        hasAddresses: addresses.length > 0,","        emailAddresses: emailAddresses,","        hasEmailAddresses: emailAddresses.length > 0,","        employers: employers,","        hasEmployers: employers.length > 0","    };","}","","pm.visualizer.set(template, createPayload());"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"8c34bb9c-a9c8-40c8-8324-81c5a387e808","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","disabled":false,"type":"text"}],"body":{"mode":"raw","raw":"{\"identityNumber\":\"{{ID1}}\"}","options":{"raw":{"language":"json"}}},"url":"{{FHIRopsBaseURL}}/DataService?connectorCode=SA_CONTACT_VERIFY","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","type":"collection"}},"urlObject":{"path":["DataService"],"host":["{{FHIRopsBaseURL}}"],"query":[{"key":"connectorCode","value":"SA_CONTACT_VERIFY"}],"variable":[]}},"response":[],"_postman_id":"8c34bb9c-a9c8-40c8-8324-81c5a387e808"},{"name":"Credit Score","event":[{"listen":"test","script":{"id":"8787fc17-d385-4ba1-aff3-44ff74ef03d0","exec":["// Credit Score Report Visualizer","var template = `","<style>","    body {","        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;","        background: #f0f4f8;","        padding: 20px;","        margin: 0;","    }","    .card {","        max-width: 450px;","        margin: 0 auto;","        background: white;","        border-radius: 12px;","        box-shadow: 0 4px 20px rgba(0,0,0,0.1);","        overflow: hidden;","    }","    .header {","        background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);","        color: white;","        padding: 24px;","        text-align: center;","    }","    .header h1 {","        margin: 0;","        font-size: 24px;","        font-weight: 600;","    }","    .score-section {","        text-align: center;","        padding: 30px 20px;","        border-bottom: 1px solid #e2e8f0;","    }","    .score-label {","        font-size: 14px;","        color: #64748b;","        text-transform: uppercase;","        letter-spacing: 1px;","        margin-bottom: 8px;","    }","    .score-value {","        font-size: 72px;","        font-weight: 700;","        color: #1e3c72;","        line-height: 1;","    }","    .risk-badge {","        display: inline-block;","        margin-top: 16px;","        padding: 8px 24px;","        border-radius: 20px;","        font-size: 14px;","        font-weight: 600;","        text-transform: uppercase;","        letter-spacing: 1px;","    }","    .risk-excellent, .risk-good {","        background: #d1fae5;","        color: #065f46;","    }","    .risk-fair {","        background: #fef3c7;","        color: #92400e;","    }","    .risk-poor {","        background: #fee2e2;","        color: #991b1b;","    }","    .details {","        padding: 20px 24px;","    }","    .detail-row {","        display: flex;","        justify-content: space-between;","        padding: 12px 0;","        border-bottom: 1px solid #f1f5f9;","    }","    .detail-row:last-child {","        border-bottom: none;","    }","    .detail-label {","        font-size: 13px;","        color: #64748b;","    }","    .detail-value {","        font-size: 14px;","        font-weight: 600;","        color: #334155;","    }","</style>","","<div class=\"card\">","    <div class=\"header\">","        <h1>Credit Score Report</h1>","    </div>","    <div class=\"score-section\">","        <div class=\"score-label\">Your Credit Score</div>","        <div class=\"score-value\">{{score}}</div>","        <div class=\"risk-badge {{riskClass}}\">{{risk}}</div>","    </div>","    <div class=\"details\">","        <div class=\"detail-row\">","            <span class=\"detail-label\">Identity Number</span>","            <span class=\"detail-value\">{{identityNumber}}</span>","        </div>","        <div class=\"detail-row\">","            <span class=\"detail-label\">Provider</span>","            <span class=\"detail-value\">{{provider}}</span>","        </div>","    </div>","</div>","`;","","function constructVisualizerPayload() {","    var response = pm.response.json();","    var riskLevel = response.risk || 'Unknown';","    var riskClass = 'risk-poor';","    ","    if (riskLevel === 'Excellent' || riskLevel === 'Good') {","        riskClass = 'risk-excellent';","    } else if (riskLevel === 'Fair') {","        riskClass = 'risk-fair';","    }","    ","    return {","        score: response.score || 'N/A',","        risk: riskLevel,","        riskClass: riskClass,","        identityNumber: response.identityNumber || 'N/A',","        provider: response.provider || 'N/A'","    };","}","","pm.visualizer.set(template, constructVisualizerPayload());"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"f901a2d0-7daa-467f-992c-b6b1d9758997","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"identityNumber\": \"{{ID1}}\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{FHIRopsBaseURL}}/DataService?connectorCode=SA_CREDIT_VERIFY_IN","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","type":"collection"}},"urlObject":{"path":["DataService"],"host":["{{FHIRopsBaseURL}}"],"query":[{"key":"connectorCode","value":"SA_CREDIT_VERIFY_IN"}],"variable":[]}},"response":[],"_postman_id":"f901a2d0-7daa-467f-992c-b6b1d9758997"},{"name":"Strike Date Service","event":[{"listen":"test","script":{"id":"8787fc17-d385-4ba1-aff3-44ff74ef03d0","exec":["// Strike Date Optimisation Report Visualizer","var template = `","<style>","    body {","        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;","        background: linear-gradient(135deg, #f5f7fa 0%, #e4e8ec 100%);","        padding: 20px;","        margin: 0;","    }","    .container {","        max-width: 550px;","        margin: 0 auto;","    }","    .card {","        background: white;","        border-radius: 16px;","        box-shadow: 0 8px 30px rgba(0,0,0,0.12);","        overflow: hidden;","    }","    .header {","        background: linear-gradient(135deg, #0a1628 0%, #1e3a5f 50%, #2c5282 100%);","        color: white;","        padding: 28px;","        text-align: center;","    }","    .header h1 {","        margin: 0;","        font-size: 26px;","        font-weight: 600;","        letter-spacing: 0.5px;","    }","    .header .subtitle {","        margin-top: 8px;","        font-size: 13px;","        opacity: 0.85;","        letter-spacing: 1px;","        text-transform: uppercase;","    }","    .explanation {","        background: #f8fafc;","        padding: 20px 24px;","        border-bottom: 1px solid #e2e8f0;","    }","    .explanation h3 {","        margin: 0 0 10px 0;","        font-size: 14px;","        color: #1e3a5f;","        text-transform: uppercase;","        letter-spacing: 1px;","    }","    .explanation p {","        margin: 0;","        font-size: 13px;","        color: #4a5568;","        line-height: 1.6;","    }","    .strike-dates {","        padding: 24px;","    }","    .strike-dates h3 {","        margin: 0 0 20px 0;","        font-size: 14px;","        color: #1e3a5f;","        text-transform: uppercase;","        letter-spacing: 1px;","        text-align: center;","    }","    .dates-grid {","        display: flex;","        justify-content: center;","        gap: 16px;","        flex-wrap: wrap;","    }","    .date-card {","        border-radius: 12px;","        padding: 20px 24px;","        text-align: center;","        min-width: 120px;","        transition: transform 0.2s ease;","    }","    .date-card:hover {","        transform: translateY(-2px);","    }","    .date-card.rank-1 {","        background: linear-gradient(135deg, #0a1628 0%, #1e3a5f 100%);","        color: white;","        box-shadow: 0 4px 15px rgba(30, 58, 95, 0.4);","    }","    .date-card.rank-2 {","        background: linear-gradient(135deg, #2c5282 0%, #4a7ab8 100%);","        color: white;","        box-shadow: 0 4px 12px rgba(44, 82, 130, 0.3);","    }","    .date-card.rank-3 {","        background: linear-gradient(135deg, #718096 0%, #a0aec0 100%);","        color: white;","        box-shadow: 0 4px 10px rgba(113, 128, 150, 0.3);","    }","    .rank-label {","        font-size: 11px;","        text-transform: uppercase;","        letter-spacing: 1px;","        opacity: 0.9;","        margin-bottom: 8px;","    }","    .date-value {","        font-size: 36px;","        font-weight: 700;","        line-height: 1;","        margin-bottom: 6px;","    }","    .optimal-badge {","        display: inline-block;","        background: rgba(255,255,255,0.2);","        padding: 4px 10px;","        border-radius: 12px;","        font-size: 10px;","        text-transform: uppercase;","        letter-spacing: 0.5px;","        margin-top: 8px;","    }","    .identity-section {","        background: #f8fafc;","        padding: 16px 24px;","        border-top: 1px solid #e2e8f0;","        display: flex;","        justify-content: space-between;","        align-items: center;","    }","    .identity-label {","        font-size: 12px;","        color: #718096;","        text-transform: uppercase;","        letter-spacing: 1px;","    }","    .identity-value {","        font-size: 14px;","        font-weight: 600;","        color: #1e3a5f;","        font-family: 'Consolas', monospace;","    }","    .footer-note {","        padding: 16px 24px;","        text-align: center;","        background: #1e3a5f;","    }","    .footer-note p {","        margin: 0;","        font-size: 11px;","        color: rgba(255,255,255,0.8);","        line-height: 1.5;","    }","</style>","","<div class=\"container\">","    <div class=\"card\">","        <div class=\"header\">","            <h1>Strike Date Optimisation Report</h1>","            <div class=\"subtitle\">South African Debit Order Analysis</div>","        </div>","        ","        <div class=\"explanation\">","            <h3>What are Strike Dates?</h3>","            <p>In South Africa, a strike date is the optimal day of the month for collecting a debit order from a consumer's bank account. These dates are determined by analysing income patterns, salary credit dates, and historical account behaviour. Selecting the right strike date maximises successful collections, reducing failed payments and return fees.</p>","        </div>","        ","        <div class=\"strike-dates\">","            <h3>Recommended Collection Days</h3>","            <div class=\"dates-grid\">","                {{#each strikeDates}}","                <div class=\"date-card rank-{{rank}}\">","                    <div class=\"rank-label\">{{rankLabel}}</div>","                    <div class=\"date-value\">{{dayWithSuffix}}</div>","                    {{#if isOptimal}}","                    <div class=\"optimal-badge\">Most Optimal</div>","                    {{/if}}","                </div>","                {{/each}}","            </div>","        </div>","        ","        <div class=\"identity-section\">","            <span class=\"identity-label\">Identity Number</span>","            <span class=\"identity-value\">{{identityNumber}}</span>","        </div>","        ","        <div class=\"footer-note\">","            <p>These dates represent the recommended days of the month for debit order collection, ranked by likelihood of successful payment.</p>","        </div>","    </div>","</div>","`;","","function getOrdinalSuffix(day) {","    var num = parseInt(day, 10);","    if (num >= 11 && num <= 13) {","        return num + \"th\";","    }","    switch (num % 10) {","        case 1: return num + \"st\";","        case 2: return num + \"nd\";","        case 3: return num + \"rd\";","        default: return num + \"th\";","    }","}","","function createPayload() {","    var response = pm.response.json();","    ","    var strikeDates = [","        {","            rank: 1,","            rankLabel: \"1st Choice\",","            dayWithSuffix: getOrdinalSuffix(response.strikeDate1),","            isOptimal: true","        },","        {","            rank: 2,","            rankLabel: \"2nd Choice\",","            dayWithSuffix: getOrdinalSuffix(response.strikeDate2),","            isOptimal: false","        },","        {","            rank: 3,","            rankLabel: \"3rd Choice\",","            dayWithSuffix: getOrdinalSuffix(response.strikeDate3),","            isOptimal: false","        }","    ];","    ","    return {","        strikeDates: strikeDates,","        identityNumber: response.identityNumber || \"N/A\"","    };","}","","pm.visualizer.set(template, createPayload());"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"1235c50c-3b2f-489a-a9df-6f04a1580cc2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"identityNumber\": \"{{ID1}}\"\r\n}","options":{"raw":{"language":"json"}}},"url":"{{FHIRopsBaseURL}}/DataService?connectorCode=STRIKE_DATE_HTTP_001","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","type":"collection"}},"urlObject":{"path":["DataService"],"host":["{{FHIRopsBaseURL}}"],"query":[{"key":"connectorCode","value":"STRIKE_DATE_HTTP_001"}],"variable":[]}},"response":[],"_postman_id":"1235c50c-3b2f-489a-a9df-6f04a1580cc2"}],"id":"6a1cfe23-f967-4b53-90bf-436a7aa7a3e6","description":"<h1 id=\"verification-api\">Verification API</h1>\n<p>This collection provides a suite of <strong>South African individual verification services</strong> powered by the <a href=\"https://carefluence.com\">Carefluence FHIRops DataService</a> gateway. It enables identity, contact, credit, and debit order optimisation checks for South African individuals using their national identity number.</p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>All requests use <strong>OAuth 2.0 Client Credentials</strong> flow. The access token is automatically fetched and attached as a Bearer token in the <code>Authorization</code> header using the following environment variables:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{OpenIDServer}}</code></td>\n<td>OpenID Connect server base URL</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientID}}</code></td>\n<td>OAuth2 client ID</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientSecret}}</code></td>\n<td>OAuth2 client secret</td>\n</tr>\n<tr>\n<td><code>{{PublisherClientScope}}</code></td>\n<td>Requested OAuth2 scope</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"base-url\">Base URL</h2>\n<p>All requests are sent to:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{FHIRopsBaseURL}}/DataService\n\n</code></pre><h2 id=\"request-format\">Request Format</h2>\n<p>All requests are <code>POST</code> with a JSON body containing the subject's South African identity number:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"identityNumber\": \"{{ID1}}\"\n}\n\n</code></pre>\n<h2 id=\"available-services\">Available Services</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Service</th>\n<th>Connector Code</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>ID Verification</td>\n<td><code>IDVerify</code></td>\n<td>Verifies identity against the South African Home Affairs HANIS/NPR register</td>\n</tr>\n<tr>\n<td>Contact Verification</td>\n<td><code>SA_CONTACT_VERIFY</code></td>\n<td>Retrieves verified contact details, addresses, and employment history</td>\n</tr>\n<tr>\n<td>Credit Score</td>\n<td><code>SA_CREDIT_VERIFY_IN</code></td>\n<td>Returns a credit score and risk rating for the individual</td>\n</tr>\n<tr>\n<td>Strike Date Service</td>\n<td><code>STRIKE_DATE_HTTP_001</code></td>\n<td>Recommends optimal debit order collection dates based on income patterns</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"visualizer\">Visualizer</h2>\n<p>Each request includes a <strong>Postman Visualizer</strong> script that renders the response as a styled HTML card or table directly in the Postman response panel, making results easy to read at a glance.</p>\n","_postman_id":"6a1cfe23-f967-4b53-90bf-436a7aa7a3e6","auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]},"isInherited":true,"source":{"_postman_id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","id":"9240ecd1-b6be-437f-95f0-b1c7221b2b81","name":"Carefluence FlowOps Data Service","type":"collection"}}}],"auth":{"type":"oauth2","oauth2":{"basicConfig":[],"advancedConfig":[{"key":"tokenName","value":"<token-name>"},{"key":"accessTokenUrl","value":"<access-token-url>"},{"key":"scope","value":"{{PublisherClientScope}}"},{"key":"clientSecret","value":"{{PublisherClientSecret}}"},{"key":"clientId","value":"{{PublisherClientID}}"},{"key":"grant_type","value":"<grant_type>"}]}},"event":[{"listen":"prerequest","script":{"id":"72e2d5ce-1744-4c75-b29f-9ef0a527f746","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"670e90a1-17b5-4f22-b727-f61d46e59091","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}]}