Create Invitation
Copy
Ask AI
result, err := client.Invitations.Create(context.TODO(), zavudev.InvitationCreateParams{
ClientName: zavudev.String("Acme Corp"),
ClientEmail: zavudev.String("contact@acme.com"),
ExpiresInDays: zavudev.Int(14),
})
if err != nil {
panic(err)
}
fmt.Println(result.Invitation.ID) // jh7am5bng9p3v2x1k4r8
fmt.Println(result.Invitation.URL) // https://dashboard.zavu.dev/invite/abc123xyz
fmt.Println(result.Invitation.Status) // pending
With Phone Number Restrictions
Restrict which countries the client can register phone numbers from:Copy
Ask AI
result, err := client.Invitations.Create(context.TODO(), zavudev.InvitationCreateParams{
ClientName: zavudev.String("Acme Corp"),
ClientEmail: zavudev.String("contact@acme.com"),
ExpiresInDays: zavudev.Int(7),
AllowedPhoneCountries: []string{"US", "MX"},
})
Get Invitation
Copy
Ask AI
result, err := client.Invitations.Get(context.TODO(), "jh7am5bng9p3v2x1k4r8")
if err != nil {
panic(err)
}
fmt.Println(result.Invitation.Status) // pending | in_progress | completed | expired | cancelled
fmt.Println(result.Invitation.ClientName) // Acme Corp
fmt.Println(result.Invitation.SenderID) // "" (until completed)
fmt.Println(result.Invitation.ExpiresAt) // 2025-01-15T00:00:00.000Z
List Invitations
Copy
Ask AI
result, err := client.Invitations.List(context.TODO(), zavudev.InvitationListParams{})
if err != nil {
panic(err)
}
for _, invitation := range result.Items {
fmt.Println(invitation.ID, invitation.ClientName, invitation.Status)
}
Filter by Status
Copy
Ask AI
result, err := client.Invitations.List(context.TODO(), zavudev.InvitationListParams{
Status: zavudev.String("pending"),
Limit: zavudev.Int(50),
})
Pagination
Copy
Ask AI
var cursor *string
for {
result, err := client.Invitations.List(context.TODO(), zavudev.InvitationListParams{
Limit: zavudev.Int(50),
Cursor: cursor,
})
if err != nil {
panic(err)
}
for _, invitation := range result.Items {
fmt.Println(invitation.ID)
}
if result.NextCursor == nil {
break
}
cursor = result.NextCursor
}
Cancel Invitation
Cancel an active invitation to prevent the client from using it:Copy
Ask AI
result, err := client.Invitations.Cancel(context.TODO(), "jh7am5bng9p3v2x1k4r8")
if err != nil {
panic(err)
}
fmt.Println(result.Invitation.Status) // cancelled
You cannot cancel a completed invitation. Once a sender is created, manage it through the senders API.
After Completion
When a client completes the signup flow, a sender is created in your project:Copy
Ask AI
result, err := client.Invitations.Get(context.TODO(), "jh7am5bng9p3v2x1k4r8")
if err != nil {
panic(err)
}
if result.Invitation.Status == "completed" && result.Invitation.SenderID != "" {
// Use the sender to send messages
_, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
To: zavudev.String("+14155551234"),
Channel: zavudev.String("whatsapp"),
MessageType: zavudev.String("template"),
Content: &zavudev.MessageContent{
TemplateID: zavudev.String("tmpl_xyz789"),
TemplateVariables: map[string]string{
"1": "John",
},
},
ZavuSender: zavudev.String(result.Invitation.SenderID),
})
if err != nil {
panic(err)
}
}
Full Example
Copy
Ask AI
package main
import (
"context"
"fmt"
"os"
"github.com/zavudev/sdk-go"
"github.com/zavudev/sdk-go/option"
)
func main() {
client := zavudev.NewClient(
option.WithAPIKey(os.Getenv("ZAVUDEV_API_KEY")),
)
invitation, err := onboardClient(client, "Acme Corp", "contact@acme.com")
if err != nil {
panic(err)
}
// Later...
checkInvitationStatus(client, invitation.Invitation.ID)
}
func onboardClient(client *zavudev.Client, clientName, clientEmail string) (*zavudev.InvitationResponse, error) {
result, err := client.Invitations.Create(context.TODO(), zavudev.InvitationCreateParams{
ClientName: zavudev.String(clientName),
ClientEmail: zavudev.String(clientEmail),
ExpiresInDays: zavudev.Int(7),
})
if err != nil {
return nil, err
}
fmt.Printf("Send this link to %s: %s\n", clientName, result.Invitation.URL)
return result, nil
}
func checkInvitationStatus(client *zavudev.Client, invitationID string) {
result, err := client.Invitations.Get(context.TODO(), invitationID)
if err != nil {
panic(err)
}
switch result.Invitation.Status {
case "pending":
fmt.Println("Waiting for client to start signup")
case "in_progress":
fmt.Println("Client is completing the signup flow")
case "completed":
fmt.Printf("Success! Sender ID: %s\n", result.Invitation.SenderID)
case "expired":
fmt.Println("Invitation expired, create a new one")
case "cancelled":
fmt.Println("Invitation was cancelled")
}
}
