Go

github.com/mosesmmoisebidth/verisec-go is the official library for Go 1.22 and later. pkg.go.dev

Install#

Terminal
go get github.com/mosesmmoisebidth/verisec-go

Create a client#

Go
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.

Go
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#

Go
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#

Go
event, err := verisec.ConstructEvent(payload, r.Header, os.Getenv("VERISEC_WEBHOOK_SECRET"))

See Webhooks for a full handler.