Go SDK
Official Caibo SDK for Go 1.18+.
go
github.com/caibopay/caibopay-goInstallation
shell
go get github.com/caibopay/caibopay-goQuick Start
main.go
package main
import (
"fmt"
"os"
"github.com/caibopay/caibopay-go"
)
func main() {
// Initialize the client
client := caibopay.New(os.Getenv("CAIBOPAY_API_KEY"))
// Create a transfer
transfer, err := client.Transfers.Create(&caibopay.TransferParams{
Amount: 100000,
SourceCurrency: "CAD",
DestinationCurrency: "COP",
Destination: &caibopay.Destination{
Type: "bank_account",
Country: "CO",
AccountHolder: "Maria Garcia",
AccountNumber: "12345678901234",
},
})
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Transfer created: %s\n", transfer.ID)
}Configuration
config.go
client := caibopay.New(
os.Getenv("CAIBOPAY_API_KEY"),
caibopay.WithAPIVersion("2026-03-01"),
caibopay.WithTimeout(30 * time.Second),
caibopay.WithMaxRetries(3),
)Error Handling
errors.go
transfer, err := client.Transfers.Create(params)
if err != nil {
var caiboErr *caibopay.Error
if errors.As(err, &caiboErr) {
switch caiboErr.Type {
case caibopay.ErrorTypeInvalidRequest:
fmt.Printf("Invalid request: %s\n", caiboErr.Message)
fmt.Printf("Parameter: %s\n", caiboErr.Param)
case caibopay.ErrorTypeAuthentication:
fmt.Println("Check your API key")
case caibopay.ErrorTypeRateLimit:
fmt.Printf("Rate limited. Retry after: %d\n", caiboErr.RetryAfter)
default:
fmt.Printf("API error: %s\n", caiboErr.Message)
}
}
return
}Pagination
pagination.go
// Using iterator
iter := client.Transfers.List(&caibopay.ListParams{Limit: 10})
for iter.Next() {
transfer := iter.Transfer()
fmt.Printf("Transfer: %s\n", transfer.ID)
}
if err := iter.Err(); err != nil {
fmt.Printf("Error: %v\n", err)
}
// Manual pagination
params := &caibopay.ListParams{Limit: 10}
for {
transfers, err := client.Transfers.List(params)
if err != nil {
break
}
for _, t := range transfers.Data {
fmt.Println(t.ID)
}
if !transfers.HasMore {
break
}
params.StartingAfter = transfers.Data[len(transfers.Data)-1].ID
}Webhooks
webhooks.go
package main
import (
"io"
"net/http"
"os"
"github.com/caibopay/caibopay-go"
"github.com/caibopay/caibopay-go/webhook"
)
func main() {
http.HandleFunc("/webhooks", handleWebhook)
http.ListenAndServe(":8080", nil)
}
func handleWebhook(w http.ResponseWriter, r *http.Request) {
payload, _ := io.ReadAll(r.Body)
signature := r.Header.Get("Caibo-Signature")
event, err := webhook.ConstructEvent(
payload,
signature,
os.Getenv("WEBHOOK_SECRET"),
)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
return
}
switch event.Type {
case "transfer.completed":
var transfer caibopay.Transfer
json.Unmarshal(event.Data.Raw, &transfer)
fmt.Printf("Transfer completed: %s\n", transfer.ID)
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"received": true}`))
}