Go
github.com/mosesmmoisebidth/verisec-go is the official library for Go 1.22 and later. pkg.go.dev
Install#
go get github.com/mosesmmoisebidth/verisec-goCreate a client#
import "github.com/mosesmmoisebidth/verisec-go"
client, err := verisec.New(os.Getenv("VERISEC_API_KEY")) // sk_test_…
if err != nil {
log.Fatal(err)
}An empty key falls back to VERISEC_API_KEY; New returns verisec.ErrNoAPIKey when there's none. Options: verisec.WithTimeout(d) (300 s per attempt by default), verisec.WithMaxRetries(n) (default 2) and verisec.WithHTTPClient(hc).
Make a call#
Every endpoint is a method named after its operation: face.verify is client.Face.Verify, phone.otp.send is client.Phone.Otp.Send. Each takes a context, its params struct and optional request options.
result, err := client.Face.Verify(ctx, &verisec.FaceVerifyParams{
Image1: verisec.ImageFromPath("selfie.jpg"),
Image2: verisec.ImageFromBytes(idPhoto),
Threshold: verisec.Float(0.8),
})
cheque, err := client.Cheques.Read(ctx, &verisec.ChequeReadParams{Image: verisec.FileFromPath("cheque.jpg")})A KYC image is a verisec.Image: ImageFromPath, ImageFromBytes, ImageFromReader or ImageFromBase64. A Financial upload is a file: FileFromPath or FileFromBytes.
Errors#
result, err := client.Face.Verify(ctx, params)
if err != nil {
var apiErr *verisec.APIError
switch {
case verisec.IsInsufficientCredits(err):
log.Print("Not enough credits: top up. Nothing was charged.")
case errors.As(err, &apiErr) && verisec.IsRateLimited(err):
log.Printf("Rate limited: wait %s.", apiErr.RetryAfter)
case errors.As(err, &apiErr):
log.Printf("%d %s (request %s): %s", apiErr.Status, apiErr.Code, apiErr.RequestID, apiErr.Message)
}
return err
}*verisec.APIError has Status, Code, Message, Param, RequestID and RetryAfter. Check its family with IsInvalidRequest, IsAuthentication, IsInsufficientCredits, IsPermission, IsNotFound, IsRateLimited and IsServerError. *verisec.ConnectionError means no answer arrived.
Webhooks#
event, err := verisec.ConstructEvent(payload, r.Header, os.Getenv("VERISEC_WEBHOOK_SECRET"))See Webhooks for a full handler.