/

Hubspot

Hubspot

Integration type

Helpdesk

What we solve

HubSpot teams need an automated way to verify customer identity and reduce fraud during lead capture and deal progression without forcing sales/ops to leave the CRM or run manual checks. This integration embeds 1Kosmos IDV and LiveID enrollment directly into HubSpot via an OAuth app, webhooks, and CRM cards/workflow actions—triggering verification from contact/deal events, writing status (IAL, match confidence, etc.) back to contact properties, and enabling pipeline gates and workflow branching based on verification results.

Attribute

Detail

Market share

~4-6% global, 228K+ paying customers, fastest-growing major CRM

Marketplace

HubSpot App Marketplace

Integration complexity

Low-Medium (OAuth app + webhooks + custom CRM cards)

Est. build time

4-6 weeks

Primary use cases

Customer onboarding for fintech/SaaS, KYC during deal progression, fraud prevention in marketplace businesses

Technical integration architecture

HubSpot integration uses the public app framework with OAuth 2.0 authentication. The app registers webhook subscriptions for contact.creation and deal.propertyChange events. When a contact is created or a deal reaches a configured stage, the app's backend calls the 1Kosmos session API and stores the session reference as a custom property on the contact object.

A Custom CRM Card displays IDV status, LiveID enrollment state, and IAL level directly on contact records. The card includes an action button that operators can click to manually initiate verification. Results flow back via the 1Kosmos webhook to the app backend, which updates HubSpot contact properties via the CRM API (PATCH /crm/v3/objects/contacts/{id}).

For automated workflows, a custom workflow action (registered via the Automation API) allows HubSpot users to add "Trigger 1Kosmos Verification" as a step in any workflow. The action accepts configurable inputs (proofing level, document types, callback behavior) and outputs verification status for use in subsequent workflow branches.

HubSpot-specific API interactions

// App backend receives HubSpot webhook (contact created)
POST /hubspot-webhook
Body: [{
    "eventId": 1,
    "subscriptionId": 12345,
    "portalId": 62515,
    "occurredAt": 1712246400000,
    "subscriptionType": "contact.creation",
    "objectId": 123456
}]

// App backend triggers 1Kosmos IDV
POST https://api.1kosmos.com/v2/verify/sessions
Body: {
    "subject_email": "jane@example.com",
    "subject_phone": "+15551234567",
    "proofing_level": "IAL2",
    "enroll_liveid": true,
    "callback_url": "https://app.example.com/1kosmos-callback",
    "metadata": {
        "crm": "hubspot",
        "portal_id": "62515",
        "contact_id": "123456"
    }
}

// On 1Kosmos webhook callback, update HubSpot contact properties
PATCH https://api.hubapi.com/crm/v3/objects/contacts/123456
Headers: { "Authorization": "Bearer {hubspot_access_token}" }
Body: {
    "properties": {
        "idv_status": "verified",
        "idv_ial_level": "IAL2",
        "idv_liveid_enrolled": "true",
        "idv_credential_did": "did:1kosmos:abc123",
        "idv_verified_date": "2026-04-04",
        "idv_match_confidence": "0.997"
    }
}

// Custom CRM Card definition (returned by app server)
GET https://app.example.com/crm-card?contactId=123456
Response: {
    "results": [{
        "objectId": 123456,
        "title": "Identity Verification",
        "properties": [
            { "label": "Status", "dataType": "STATUS", "value": "Verified" },
            { "label": "IAL Level", "dataType": "STRING", "value": "IAL2" },
            { "label": "LiveID", "dataType": "STRING", "value": "Enrolled" },
            { "label": "Verified", "dataType": "DATE", "value": "2026-04-04" }
        ],
        "actions": [
            { "type": "ACTION_HOOK", "label": "Re-verify Identity",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-idv" },
            { "type": "ACTION_HOOK", "label": "Trigger Step-Up Auth",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-liveid" }
        ]

// App backend receives HubSpot webhook (contact created)
POST /hubspot-webhook
Body: [{
    "eventId": 1,
    "subscriptionId": 12345,
    "portalId": 62515,
    "occurredAt": 1712246400000,
    "subscriptionType": "contact.creation",
    "objectId": 123456
}]

// App backend triggers 1Kosmos IDV
POST https://api.1kosmos.com/v2/verify/sessions
Body: {
    "subject_email": "jane@example.com",
    "subject_phone": "+15551234567",
    "proofing_level": "IAL2",
    "enroll_liveid": true,
    "callback_url": "https://app.example.com/1kosmos-callback",
    "metadata": {
        "crm": "hubspot",
        "portal_id": "62515",
        "contact_id": "123456"
    }
}

// On 1Kosmos webhook callback, update HubSpot contact properties
PATCH https://api.hubapi.com/crm/v3/objects/contacts/123456
Headers: { "Authorization": "Bearer {hubspot_access_token}" }
Body: {
    "properties": {
        "idv_status": "verified",
        "idv_ial_level": "IAL2",
        "idv_liveid_enrolled": "true",
        "idv_credential_did": "did:1kosmos:abc123",
        "idv_verified_date": "2026-04-04",
        "idv_match_confidence": "0.997"
    }
}

// Custom CRM Card definition (returned by app server)
GET https://app.example.com/crm-card?contactId=123456
Response: {
    "results": [{
        "objectId": 123456,
        "title": "Identity Verification",
        "properties": [
            { "label": "Status", "dataType": "STATUS", "value": "Verified" },
            { "label": "IAL Level", "dataType": "STRING", "value": "IAL2" },
            { "label": "LiveID", "dataType": "STRING", "value": "Enrolled" },
            { "label": "Verified", "dataType": "DATE", "value": "2026-04-04" }
        ],
        "actions": [
            { "type": "ACTION_HOOK", "label": "Re-verify Identity",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-idv" },
            { "type": "ACTION_HOOK", "label": "Trigger Step-Up Auth",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-liveid" }
        ]

// App backend receives HubSpot webhook (contact created)
POST /hubspot-webhook
Body: [{
    "eventId": 1,
    "subscriptionId": 12345,
    "portalId": 62515,
    "occurredAt": 1712246400000,
    "subscriptionType": "contact.creation",
    "objectId": 123456
}]

// App backend triggers 1Kosmos IDV
POST https://api.1kosmos.com/v2/verify/sessions
Body: {
    "subject_email": "jane@example.com",
    "subject_phone": "+15551234567",
    "proofing_level": "IAL2",
    "enroll_liveid": true,
    "callback_url": "https://app.example.com/1kosmos-callback",
    "metadata": {
        "crm": "hubspot",
        "portal_id": "62515",
        "contact_id": "123456"
    }
}

// On 1Kosmos webhook callback, update HubSpot contact properties
PATCH https://api.hubapi.com/crm/v3/objects/contacts/123456
Headers: { "Authorization": "Bearer {hubspot_access_token}" }
Body: {
    "properties": {
        "idv_status": "verified",
        "idv_ial_level": "IAL2",
        "idv_liveid_enrolled": "true",
        "idv_credential_did": "did:1kosmos:abc123",
        "idv_verified_date": "2026-04-04",
        "idv_match_confidence": "0.997"
    }
}

// Custom CRM Card definition (returned by app server)
GET https://app.example.com/crm-card?contactId=123456
Response: {
    "results": [{
        "objectId": 123456,
        "title": "Identity Verification",
        "properties": [
            { "label": "Status", "dataType": "STATUS", "value": "Verified" },
            { "label": "IAL Level", "dataType": "STRING", "value": "IAL2" },
            { "label": "LiveID", "dataType": "STRING", "value": "Enrolled" },
            { "label": "Verified", "dataType": "DATE", "value": "2026-04-04" }
        ],
        "actions": [
            { "type": "ACTION_HOOK", "label": "Re-verify Identity",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-idv" },
            { "type": "ACTION_HOOK", "label": "Trigger Step-Up Auth",
              "httpMethod": "POST", "uri": "https://app.example.com/trigger-liveid" }
        ]

HubSpot custom contact properties

Property

Type

Group

Description

idv_status

Enumeration

Identity Verification

pending, verified, failed, expired

idv_ial_level

Enumeration

Identity Verification

IAL1, IAL2

idv_liveid_enrolled

Enumeration

Identity Verification

true, false

idv_credential_did

String

Identity Verification

W3C DID reference

idv_verified_date

Date

Identity Verification

Date of verification

idv_match_confidence

Number

Identity Verification

Biometric match score

idv_document_type

Enumeration

Identity Verification

drivers_license, passport, national_id

idv_last_stepup_date

Date

Identity Verification

Most recent step-up auth

Workflow insertion points

  • Contact creation workflows: Auto-trigger IDV on form submission or import

  • Deal pipeline gates: Require verification before deals advance past qualification stage

  • Custom workflow actions: Drag-and-drop IDV step available in the workflow builder

  • Marketing email suppression: Exclude unverified contacts from campaigns to protect sender reputation

  • Custom CRM Cards: Real-time IDV status panel on every contact record


Transform how you verify and authenticate

Secure onboarding, eliminate passwords, and stop fraud on one platform. Schedule a demo and see it in action.

Transform how you verify and authenticate

Secure onboarding, eliminate passwords, and stop fraud on one platform. Schedule a demo and see it in action.

Transform how you verify and authenticate

Secure onboarding, eliminate passwords, and stop fraud on one platform. Schedule a demo and see it in action.