Documentation Index
Fetch the complete documentation index at: https://docs.windbackai.com/llms.txt
Use this file to discover all available pages before exploring further.
Go SDK
The Go SDK is coming soon. In the meantime, you can use the Windback API directly with Go’s standard net/http package.
Direct API Usage
Track an Event
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"event": "feature_used",
"customer_email": "jane@example.com",
"properties": map[string]interface{}{
"feature": "exports",
"plan": "pro",
},
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.windbackai.com/api/v1/track",
bytes.NewBuffer(body),
)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", "sk_live_your_secret_key")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
defer resp.Body.Close()
fmt.Printf("Status: %d\n", resp.StatusCode)
}
Create a Churn Event
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
type ChurnEvent struct {
CustomerEmail string `json:"customer_email"`
CustomerName string `json:"customer_name"`
EventType string `json:"event_type"`
CancelReason string `json:"cancel_reason"`
MRR int `json:"mrr"`
Currency string `json:"currency"`
PlanName string `json:"plan_name"`
TenureDays int `json:"tenure_days"`
}
func main() {
event := ChurnEvent{
CustomerEmail: "jane@example.com",
CustomerName: "Jane Smith",
EventType: "cancellation",
CancelReason: "Too expensive",
MRR: 4999,
Currency: "usd",
PlanName: "Team Pro",
TenureDays: 180,
}
body, _ := json.Marshal(event)
req, _ := http.NewRequest(
"POST",
"https://api.windbackai.com/api/v1/projects/my-project/churn-events",
bytes.NewBuffer(body),
)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", "sk_live_your_secret_key")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
fmt.Printf("Response: %s\n", respBody)
}
Send a Custom Webhook
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]interface{}{
"customer_email": "jane@example.com",
"customer_name": "Jane Smith",
"event_type": "cancellation",
"cancel_reason": "Too expensive for our team",
"mrr": 4999,
"currency": "usd",
"provider": "internal",
"plan_name": "Team Pro",
"tenure_days": 180,
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest(
"POST",
"https://api.windbackai.com/api/v1/webhooks/custom/pub_your_key",
bytes.NewBuffer(body),
)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
defer resp.Body.Close()
fmt.Printf("Status: %d\n", resp.StatusCode)
}
When the Go SDK is released, it will be available via go get github.com/windback-dev/windback-go.
API Reference
While waiting for the SDK, refer to the API Overview for the full list of endpoints you can call from Go.