ProveSDK 1.1.0

dotnet add package ProveSDK --version 1.1.0
                    
NuGet\Install-Package ProveSDK -Version 1.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ProveSDK" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ProveSDK" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="ProveSDK" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ProveSDK --version 1.1.0
                    
#r "nuget: ProveSDK, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ProveSDK@1.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ProveSDK&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=ProveSDK&version=1.1.0
                    
Install as a Cake Tool

Unofficial .NET client for Prove

You can use this from C# or F#.

https://www.prove.com/

Supported services:

  • Identity (IDV)
  • Pre-Fill
  • TrustScore
  • Sms Delivery
  • InstantLink SMS

Usage examples

Here are some examples how to use this library. The test data here (e.g. phone "2001001686") is not real, just Prove test-environment data. For simplicity we use F#.

Identity, TrustScore and Pre-Fill take a ConsentStatus: say what consent you hold from the person (OptedIn, OptedOut, NotCollected or Unknown). They refuse a phone number that starts with a trunk 0 or has one in brackets, such as 07700 900123 or +44 (0)7700 900123, as the number sent would be a different one: write +44 7700 900123. After +44 or 0044, a trunk 0 without brackets is dropped, as E.164 says for the UK: +44 07700 900123 goes as 447700900123. What follows must be 7 to 10 digits. 44 07700 900123, without + or 00, is refused. After any other country code every digit goes as typed, so write those numbers in E.164: Italy's +39 06 keeps its zero, and this library has no rule for countries that drop theirs. Sms and InstantLink refuse every number the other three refuse. One they accept goes as typed, except the two UK forms above, which go as +447700900123. The failure for a refused number gives how many digits it holds and at most its last two.

A 2xx answer whose body can't be read, an InstantLink answer without a status, and an Identity answer whose response has no readable verified come back as each call's own failure, never an exception or a success. The failure holds the status and the body's length and kind, nothing from the body.

The failure for a non-2xx answer also holds these fields when the body is a JSON object: status, code, failureCode, responseCode, error, description, message, additionalInfo and error_description. Email addresses and digits in the worded ones are masked; a name in them can't be recognised. Other fields and a body that isn't a JSON object stay out.

Identity (IDV)

With Identity you send a customer information to Prove and they verify if that customer is match in their record.

/// ProveSDK.ServiceLicense: Get your license details from Prove
let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testVerifyProve1() = ProveSDK.Identity.callProveVerify license ConsentStatus.OptedIn "2001001686" "Tod" "Weedall" (Some "San Antonio") (Some "78285") (Some "TX") (Some (DateTime(1984,12,10))) (Some "565-22-8370") |> Async.RunSynchronously
let testVerifyProve2() = ProveSDK.Identity.callProveVerify license ConsentStatus.OptedIn "2001001687" "Agretha" "Chene" (Some "Boston") (Some "2208") (Some "MA") (Some (DateTime(1994,12,29))) (Some "369-95-6933") |> Async.RunSynchronously

TrustScore

Trustscore gives a trust-score (from 0-1000) of how reliable the phone number is.

let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testTrustScoreProve1() = ProveSDK.TrustScore.callProveTrustScore license ConsentStatus.OptedIn "2001001686" |> Async.RunSynchronously //Some 925

Pre-Fill

Prefill needs a verified phone number and consent from customer. It fetches data of a customer based on a few key factors.

let license = { Environment = ProveEnvironment.Staging; ProveUser = "serviceuser"; ProvePassword = "pwd"; ClientId = "123"}
let testIdentityProve1() = ProveSDK.Prefill.provePrefillIdentity license ConsentStatus.OptedIn "2001001686" (DateTime(1984,12,10)) (Some "565-22-8370") |> Async.RunSynchronously

SMS Delivery

You can send SMS text messages via Prove, if you have that service enabled in your contract.

let smsLicense : ProveSDK.Sms.License = { Environment = ProveEnvironment.Staging; ClientId = "123"; LicenseKey = "456" }
ProveSDK.Sms.send smsLicense "2001001686" "Hello World."

InstantLink is a phone verification service. It sends a code to customer and expects to validate it.

let sesssionId = System.Guid.NewGuid().ToString()
let myReturnUrl = "http://localhost" //your service return
let instaLicense =  { Environment = ProveEnvironment.Staging; ApiClientId = "123"; SubClientId = Some "123" }

let! genResult = ProveSDK.InstantLink.generate instaLicense myReturnUrl "123.123.123.123" "2001001686" sessionId
match genResult with
| Ok (InstantLink.InstantLink instantLink) ->
   // send instantLink to user via sms (see above) 
   instantLink
| _ -> ""

let fingerPring = ProveSDK.InstantLink.validate instaLicense sessionId verificationFingerprint
let result =
   match fingerPring with
   | Ok res when res.LinkClicked -> true
   | _ -> false

Nuget: https://www.nuget.org/packages/ProveSDK/

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 0 11/7/2026
1.0.12 57 11/5/2026
1.0.11 52 11/4/2026
1.0.10 171 4/30/2026
1.0.8 394 5/12/2025
1.0.7 510 1/21/2025
1.0.6 222 1/14/2025
1.0.4 513 8/2/2024
1.0.1 274 7/19/2024
1.0.0 251 7/18/2024

v1.1.0:
- BREAKING: callProveVerify, provePrefillIdentity and callProveTrustScore take a ConsentStatus, sent as Consent-Status, instead of always sending optedIn
- BREAKING: Identity, Pre-Fill and TrustScore refuse a number with a leading or bracketed trunk 0, or a 00 prefix without a whole number after it, which was sent as a different number
- BREAKING: callProveTrustScore gives ValueNone, not ValueSome 0, for a number refused here
- FIXED: callProveVerify sent the state code as extendedAddress; it goes as region
- FIXED: request bodies are UTF-8, so names outside ASCII reach Prove intact
- FIXED: the sign-in form encodes its values
- FIXED: a sign-in that fails or gives no token sends nothing further and returns the failure
- FIXED: a non-200 answer without a readable error becomes an error naming the status
- FIXED: dates of birth and added timestamps are Gregorian whatever the culture
- FIXED: printing a license or an SMS or InstantLink request (%A, ToString) hides its keys and the person's number
- FIXED: Readme examples match the API
- FIXED: a UK number written +44 0 or 0044 0 drops the trunk 0; other country codes keep every digit
- FIXED: a 2xx answer with an unreadable or empty body on any data call is that call's failure, with the status and the body's length and kind, not an exception or a success
- FIXED: an answer of the typed InstantLink calls without a status is a failure, not a success with PhoneMatch = Yes
- FIXED: callProveVerify fails on a response without a readable verified, instead of isDone = true and an exception in the caller
- FIXED: failure text holds the status, the body's length and kind, and only named JSON error fields with digits and emails masked, never the body's text
- FIXED: a refused number isn't echoed whole: the failure gives its digit count and at most its last two digits
- BREAKING: Sms.send and InstantLink.generate refuse every number Identity refuses, such as 07700 900123