1. Glow IDV SDK
Glow Platform
  • Welcome to Glow Data Service!
  • Getting Started
  • Glow Portals
  • Introducing the Glow System
  • API Authentication
  • Smart Meter Onboarding
    • Introducing Smart Meter Onboarding
    • Smart Meter Eligibility Check
    • Terms and Conditions APIs and Management
    • Onboarding Methods — Direct Integration
      • EUI/Postcode Check
      • AVS Check
    • Onboarding Methods — Hosted Integration
      • Glow IDV SDK
        • Introducing the Glow SDK
        • Supported Verification Methods
        • Implementation Guide — Web
        • Implementation Guide — Mobile
        • Verifiable Credentials
        • Verification Result Screen
        • Consent Capture & Onboarding
    • Onboarding Methods — No Integration
      • Invitation Functionality
      • Agent Verification Portal
  • Data Retrieval
    • Retrieving Time Series Data from Onboarded Users
  • Consent Management and Offboarding
    • Consent Management
    • Offboarding
  • Glow CADs & Fulfilment
    • Glow CAD Fulfilment
  • API Reference
    • Smart Meter Elgibility
      • eligibility
        • smets-ihd-cad
          • Check MPxN has CAD/PPMID
        • checksmetsihd
          • postcode
            • Match EUI IHD with postcode
          • Match EUI IHD with MPxN
        • checksmetsmpxn
          • Check MPXN is eligible in DCC.
    • Content System
      • content
        • {contentId}
          • get a content object
          • Update an existing content object
        • Find all the content objects of an application
        • Add a content object
      • languagecontent
        • {languageContentId}
          • get a language content object by ID
          • Update an existing language content object
        • Find all the language content objects of an application
        • Add a language content object
      • termsconditions
        • {tcId}
          • get a terms and conditions object by ID
        • current
          • Find the terms and conditions that are in force.
        • Find all the terms and conditions of an application
        • Add terms and conditions
      • termsconditionsuser
        • {tcUserId}
          • get a specified terms and conditions user obj
        • Find all the responses to terms and conditions documents.
        • Add a user's response to Terms & Conditions document
      • supportdetails
        • {supportDetailsId}
          • get a support details object
        • Find all the support detail objects of an application
        • Add a support details object
      • faq
        • {faqId}
          • get a FAQ object
        • Find all the FAQ objects of an application
        • Add a faq object
      • prompttype
        • {promptTypeId}
          • get a Prompt Type object
        • Find all the prompt type objects of an application
        • Add a Prompt Type object
      • prompt
        • {promptId}
          • get a Prompt object
        • Find all the prompt objects of an application
        • Add a Prompt object
      • promptuser
        • {promptUserId}
          • get a Prompt User object
        • Find all the prompt user objects of an application
        • Add a Prompt User object
      • useraction
        • {userActionId}
          • get a User Action object
        • Find all the user action objects of an application
        • Add a User Action object
      • useractiontype
        • {userActionTypeId}
          • get a User Action Type object
        • Find all the user action type objects of an application
        • Add a User Action Type object
    • User System
      • register
        • User self registers
      • account
        • {accountId}
          • status
            • Find the status of a specified account. If the account is using an external directory service, this call will confirm whether the user is authenticated against it. This call requires administrative application level credentials.
          • mobileapptoken
            • Add mobile app token to a user
            • Remove a mobile app token to a user
          • Find specific account of an application.
          • Updates the account's metadata.
          • Delete account
        • status
          • With a given JWT token a user can have their account status verfied. If their account is created under an external directory service, this call will establish whether a user's token to the external service is still valid.
        • email
          • Change a user's email
        • name
          • Change a user's name
        • changepassword
          • Change a user's password
        • Find all accounts of an application
        • Add an account to an existing user
      • user
        • {userId}
          • username
            • Change a user's username
          • Find specific user that has an account in an application.
          • Delete specific user. This will delete all the accounts of a user. Please refer to delete account API. This API requires specific permissions.
        • verify
          • Generate a user verification token
          • Verify a user verification token
        • resetpassword
          • Generate a token that can be used by user to reset their password.
          • A user resets their password
        • verification
          • status
            • mpxns
              • renewal
                • Renew consent for a number of meterpoints
              • revocation
                • Revoke consent for a number of meterpoints
            • mpxn
              • {mpxn}
                • renewal
                  • Get meter point consent renewals
                  • Renew meter point consent
                • revocation
                  • Get meter point consent revocations
                  • Revoke meter point consent
            • API to retrieve user's meter points' consent and verification
        • Find specific user that has an account in an application from the username.
        • Create a user
      • accountprofile
        • {profileName}
          • Find specific group of application
        • Find all the profiles of an account
        • Create an account profile under a given profileName.
      • accountsession
        • get the session of an account
        • Update an account session.
      • auth
        • token
          • {tokenId}
            • Deletes a token, specified by its tokenId.
          • Returns all the tokens that are active and valid for a specified user.
        • newToken
          • Generate a new token for an account.
        • deleteToken
          • delete a token
        • oauth
          • access
            • Exchange the Authorization Code for an Access Token.
          • Check and validate an Oauth Access token.
          • Authenticate a user and generate an OAuth 2.0 Authorization Code Grant.
        • Checks whether a user token is valid.
        • authenticate an account
    • Virtual Entity System
      • vesys
        • appstats
          • find statistics on the number of Virtual Entities per application
      • virtualentity
        • {id}
          • resources
            • Find the resources of that belong to Virtual Entity with ID
          • attribute
            • Find a Virtual Entity's metadata by ID
            • Add/Update a Virtual Entity's metadata
            • delete metadata from the Virtual Entity
          • Find Virtual Entity by ID
          • Update a Virtual Entity
          • Delete a Virtual Entity
        • Add a new Virtual Entity
        • Find all Virtual Entities
      • vetype
        • {id}
          • resources
            • Find all resources that belong to a user that satisfy the Resource Types in the Virtual Entity Type definition.
          • Find Virtual Entity Type by ID
          • Update a Virtual Entity Type
        • Add a new Virtual Entity Type
        • Find all Virtual Entity Types
    • Webhook System
      • webhook
        • {webhookId}
          • Find webhook by ID
        • error
          • {errorId}
            • Find a particular webhook error
          • Find all the webhooks that have failed
        • Find all webhooks of an application (or user)
    • Resource System
      • resource
        • {id}
          • readings
            • Get resource readings
          • current
            • Get the current resource reading.
          • first-time
            • Get the UTC time of the first available reading
          • last-time
            • Get the UTC time of the most recent available reading
          • meterread
            • Get the cumulative value reported on a metering device. (Not supported for all resource types).
          • tariff
            • Get the latest tariff that is being applied to a resource.
          • tariff-list
            • Get the tariff history that is being applied to a cost resource.
          • catchup
            • Trigger a request to retrieve the latest available readings from the DCC.
          • glowbinary
            • API that returns the resource's raw data in the Glow Binary format.
          • Find resource by ID
        • count
          • Count the number of resources per resourceType
        • Add a new resource
        • Find all resources per user or application
      • resourcetype
        • {id}
          • resource
            • Find resources of a specific resource type that belong to a user
          • appresource
            • Find resources of a specific resource type that an application has access to
          • Find resourceType by ID
        • Add a new resource type.
        • Find all resource types
    • Notification System
      • alerttype
        • {alertTypeId}
          • Find alert type by ID
          • Updates the alert type's metadata.
        • Find all alert types of an application
        • Create an alert type
      • alert
        • {alertId}
          • Get an alert by Id
        • user
          • Get the alerts sent to a user
        • Send an alert
      • template
        • {templateId}
          • Find template type by ID
          • Updates the teplate's metadata.
        • {alertTypeId}
          • {channelType}
            • {cultureCode}
              • Find template by alertTypeId, channeType and cultureCode
              • Create template by alertTypeId, channeType and cultureCode
        • Find all templates of an application
        • Create a template
      • notification
        • {notificationId}
          • log
            • Get the logs of a particular notification
          • Get a notification by Id
    • DFS
      • dfs
        • termsconditions
          • The current version of terms and conditions that is pertinent to DFS for a particular application.
        • user
          • Get all the users that have opted in the DFS functionality
          • User opts in to DFS functionality for a particular MPxN. The mpxn field is only required if a user has more than one MPxN.
          • User opts out of DFS functionality
        • event
          • {dfsEventId}
            • user
              • Get all the users that have participated in a particular DFS event
          • user
            • participation
              • API to indicate User participating in particular DFS event
            • Get all the events a user has signed up for
    • Device Management System
      • devicetype
        • {id}
          • Find Device Type by ID
        • Add a new Device Type
        • Find all device types
      • device
        • {id}
          • status
            • This call can be used to see whether a gateway device is sending packets to the Glow Platform (i.e. via WiFi).
          • Find device by ID
        • resource
          • {resourceId}
            • Find the device that sources a specified resource.
        • meter-point
          • {meterPointNumber}
            • inventory
              • Get the DCC inventory of a meter point
            • resources
              • Get the resources associated to a meter point
        • smart-meter
          • {eui}
            • inventory
              • Get the DCC inventory of a meter point by providing an EUI.
        • status
          • This call can be used to see whether a gateway device is sending packets to the Glow Platform (i.e. via WiFi).
        • Get a user's devices
        • Add a new device
      • discover
        • {hardwareId}
          • Find device by ID
  1. Glow IDV SDK

Implementation Guide — Web

The Glow SDK is delivered as an embedded iframe, slotting into your existing web page's UI without a separate redirect or standalone page. The energy consumer completes verification inline, within the onboarding journey you already provide through your own front end.
The steps to implement the Glow SDK into your onboarding journey are:
1.
Add the Glow SDK script to your page
2.
Add a container element
3.
Initialise, configure, and mount the SDK
4.
Add a listener to retrieve results
Each step is explained in detail below.

Implementation Guide#

The SDK should sit as a gate in front of your existing consent step — the energy consumer can't proceed to grant consent until they've completed verification and a verifiable credential has been issued.

Prerequisites#

To use the Glow SDK, you must be working on behalf of an organisation with an active contract signed with Glow, and signed up to the Glow Data Service.
You will also need:
Your application ID. Found in the Glow Developer Portal.
A publicGlowIdvClientKey.
A subject for the Verifiable Credential for each energy consumer. This can be a unique reference or an email address for that energy consumer.
A page where you can add a <script> tag and a container element.
Where you add the Glow SDK depends on your existing onboarding journey. It must precede the consent-granting stage, since consent can only be granted by a verified energy consumer.

Placement guidance#

The verifiable credential is required as evidence attached to the Consent Capture & Smart Meter Onboarding API call — consent captured without it isn't valid.
Don't let the energy consumer skip or dismiss the SDK without completing or explicitly abandoning verification.
If consent has expired or been revoked, the energy consumer must re-verify and re-grant consent before their data can be accessed again. In these cases, if they wish to reinstate their consent, they will need to reverify and re-onboard.

Typical integration points#

Some common places this step fits, depending on your product:
Sign-up flow — as a step in onboarding, before the customer can link their energy account to access their smart meter data.
Settings/account page — if an energy consumer is granting data access after they've already signed up (e.g. connecting a new property or service, or re-instating smart meter data access due to consent expiry or revocation).

Handling verification failures#

If the energy consumer fails or abandons verification, they should not be able to proceed to the Consent Capture and Onboarding step. They will not be able to grant consent without a verifiable credential.
If verification continues to fail, there is no limit on retry attempts - the energy consumer will not be blocked from accessing the SDK after a certain number of attempts.
We recommend you advise your energy consumers to get in touch with you if they encounter verification errors when submitting details they are confident are correct, and you can then escalate to the Glow team when required.

Step 1: Add the Glow SDK script to your page#

Add the SDK script to the <head> of your page. This exposes a global GlowIDV constructor on window.

Step 2: Add a container element#

Add an element where the verification iframe will be rendered. Give it an id you can target.

Step 3: Initialise, configure, and mount the SDK#

Once the page has rendered and the container exists in the DOM, create a GlowIDV instance and mount it into your container.
Framework note
Initialisation must run after the container element is in the DOM. Place it in the lifecycle hook your framework provides:
Plain HTML/JS — inside a window.addEventListener('load', ...) callback, or a <script> placed after the container.
React — inside a useEffect(() => { ... }, []).
Vue — inside the onMounted() hook.
Angular — inside ngAfterViewInit().
Full worked examples for each framework, including message handling, are in Framework Examples below.

Configuration options#

OptionTypeRequiredConfigurableDescription
applicationIdstringYesYes (if you have more than one application)Your Glow application identifier.
allowedMethodsstring[]YesYesThe verification methods to offer the customer. See values below.
iframeUrlstringYesNoURL of the hosted Glow IDV verification iframe.
subjectstringYesYesThe identifier for the consumer being verified.
themeobjectNoYesVisual customisation of the embedded flow. See Theming.
publicGlowIdvClientKeystringYesNoUnique to your organisation - will need to be included in the initialisation of the SDK to verify your identity and authorise your access to the SDK.
customisedMessagestringNoYesMessage shown at the end of a successful verification, informing the energy consumer what happens next.

applicationId value#

Your Glow applicationId for the application you're onboarding the energy consumer into (if you have more than one).

allowedMethods values#

ValueVerification method
document-uploadUpload of a supporting document (e.g. an energy bill).
mpxn-eui-last4Meter point number (MPXN) plus the last four digits of the IHD identifier.
Pass only the methods you want to offer. The energy consumer chooses between the enabled methods at the start of the flow. See the Supported Verification Methods page for details on each.

iframeUrl value#

The production URL:
https://register.glownetzero.com/iframe.html

subject value#

Any string you need to identify your energy consumer — an email address or a unique reference both work. It becomes the username shown in the Glow Developer and Support portals.

theme object#

The theme option lets you match the embedded verification flow to your brand.
theme options#
OptionTypeDescription
logoUrlstringURL of the logo displayed within the flow. Use a hosted, publicly accessible image.
fontstringA CSS font-family value applied to the flow's text.
primaryColorstringThe primary brand colour (e.g. buttons and accents), as a CSS colour value.
secondaryColorstringThe secondary colour used throughout the flow, as a CSS colour value.
borderRadiusstringCorner rounding, as a CSS length (e.g. 12px).
spacingstringThe base spacing unit, as a CSS length (e.g. 16px).
Notes on themes#
Colours accept any valid CSS colour value; hex (#f48f23) is shown here.
font accepts a standard CSS font stack.
borderRadius and spacing accept CSS length values (px, rem, etc.).
logoUrl should point at an image hosted somewhere the energy consumer's browser can reach.

publicGlowIdvClientKey value#

This will be given to you securely by the Glow team upon setting up your Organisation. The publicGlowIdvClientKey is unique to your organisation and will need to be included in the initialisation of the SDK to verify your identity and authorise your access to the SDK.

Mounting#

After constructing the instance, render it into a container element by passing a CSS selector to mount:
The container must exist in the DOM before you call mount.

Step 4: Add a listener to retrieve results#

The iframe communicates back to your application using postMessage. Add a listener to the parent window, verify the message origin for security, then handle each message type as outlined below.
Clean up
If you register the listener inside a component, remove it when the component unmounts to avoid duplicate handlers: window.removeEventListener('message', handleMessage);

Messages#

The parent DOM (the website that integrates the SDK) hosts the Glow IDV SDK via an iframe. The next section explains the message types that can be sent between them.

Sent by the SDK to the iframe#

MessageDirectionDescription
GLOW_IDV_INITSDK → iframeSends the initial configuration to the iframe.

Received from the iframe on your page#

MessageDirectionDescription
GLOW_IDV_READYiframe -> Parent DOMThe iframe has loaded and is ready to receive data.
GLOW_IDV_RESIZEiframe -> Parent DOMThe iframe's content height has changed.
GLOW_IDV_METHOD_SELECTiframe -> Parent DOMThe energy consumer selected a verification method.
GLOW_IDV_CHANGEiframe -> Parent DOMA field value changed.
GLOW_IDV_FILE_UPLOADiframe -> Parent DOMThe energy consumer uploaded a file.
GLOW_IDV_SUBMITiframe -> Parent DOMThe energy consumer submitted a form.
GLOW_IDV_SUCCESSiframe -> Parent DOMVerification succeeded — carries the verifiable credential.
GLOW_IDV_ERRORiframe -> Parent DOMAn error occurred during verification.
GLOW_IDV_EXITiframe -> Parent DOMThe energy consumer exits the journey after successfully verifying.
Only GLOW_IDV_SUCCESS must be handled for the integration to function — the rest are optional but recommended for a polished UX.

Handling each message#

GLOW_IDV_READY#

The iframe has loaded and is ready. Use this to hide any loading spinner you were showing over the frame.

GLOW_IDV_RESIZE#

The iframe's content height changed. Without handling this, a fixed-height frame will clip content or show an inner scrollbar. Resize the iframe to match so the embed grows and shrinks naturally.
The field name (message.height above) and whether the value is a number of pixels are not yet confirmed.

GLOW_IDV_METHOD_SELECT#

The energy consumer chose a verification method. Typically you don't need to act on this, but it's a useful analytics event — it tells you which methods energy consumers actually pick.

GLOW_IDV_CHANGE#

A field value changed inside the flow. Most integrations can ignore this. Handle it only if you want fine-grained analytics or to react to the energy consumer's progress.

GLOW_IDV_FILE_UPLOAD#

The energy consumer uploaded a document. Useful for showing your own confirmation or progress UI alongside the frame.

GLOW_IDV_SUBMIT#

The energy consumer submitted their details and verification is now running. Show a loading state so the energy consumer knows something is happening.

GLOW_IDV_SUCCESS#

Verification succeeded. This message carries the verifiable credential. Capture it, hand it to your downstream consent flow, and clean up.
This is the one message you must handle. Treat the credential as sensitive — don't log it or place it in a URL.

GLOW_IDV_ERROR#

Verification failed or errored. Show the energy consumer a clear message and, where appropriate, let them try again.
example of error message that comes back:
{
    "message": {
        "status": "error",
        "message": "Cannot POST /sd",
        "details": {
            "message": "Cannot POST /sd",
            "error": "Not Found",
            "statusCode": 404,
            "path": "/sd",
            "timestamp": "2026-07-16T13:45:50.823Z"
        }
    }
}

GLOW_IDV_EXIT#

After successful verification, a button lets the energy consumer exit the journey. It triggers this message, and your parent component can navigate to the next page.

Successful results#

When the energy consumer completes verification, your handleMessage listener receives a message with type GLOW_IDV_SUCCESS. The payload contains the verifiable credential generated for the energy consumer, which you pass to your downstream consent and data-access flow.
data in GLOW_IDV_SUCCESS:
{
  "data": {
    "applicationId": "demo-id",
    "token": {
      "jwt": "eyJhbGciOiJFUzI1NiIsImtpZCI6Ing1dFMyNTYtbldhNGc...",
      "jti": "vc_0wp0tBkXBDGj",
      "exp": 1791102043,
      "nonce": "2QJxMhn1U1pIhLAz",
      "mpan_hash": "Xgw7N8rE95GDgDXmW5nzH_w_UEYnI0Kvf8k203s1SD4"
    },
    "verificationId": "",
    "method": "agent-form",
    "timestamp": "2026-07-06T08:20:43.676Z",
    "subject": "test",
    "mpan": "1200000000000"
  }
}
A failed attempt arrives as GLOW_IDV_ERROR, and GLOW_IDV_CHANGE fires as the energy consumer progresses through the flow — useful for tracking progress or updating your own UI.
The token value in the GLOW_IDV_SUCCESS message holds the Verifiable Credential. See the Verifiable Credentials page for the full VC structure and lifetime.

Framework Examples#

The Glow IDV SDK can be integrated into any JavaScript framework. Each example below sets up the SDK and handles every message type described above, adapted to that framework's lifecycle hooks.
React
Vue 3
<template>
  <div>
    <LoadingSpinner v-if="isLoading" />
    <VerifyingIndicator v-if="isVerifying" />
    <div id="idv-container" ref="containerRef"></div>
  </div>
</template>

<script setup lang="ts">
Angular

What Comes Next?#

Following a successful verification, the SDK generates a unique Verifiable Credential for the energy consumer. This credential is tamper-evident proof that the energy consumer's identity and address have been verified, and can be relied upon by the downstream consent and data-access flow.
The verifiable credential lets you capture the energy consumer's consent to access their energy data — you must attach it as evidence to the Consent Capture & Onboarding API call.
This process is not facilitated through the SDK and requires additional API implementation. See the dedicated Consent Capture & Onboarding and Verifiable Credentials pages for details.
Modified at 2026-09-02 10:30:43
Previous
Supported Verification Methods
Next
Implementation Guide — Mobile
Built with