Skip to main content
This guide shows the common integration path: create the client, validate authentication, prepare an instance, configure event delivery, and send messages.

1. Install and create the client

dotnet add package VZaps.SDK
using VZaps;
using VZaps.Models;

using var client = new VZapsClient(new VZapsClientOptions
{
    ClientToken = Environment.GetEnvironmentVariable("VZAPS_CLIENT_TOKEN"),
    ClientSecret = Environment.GetEnvironmentVariable("VZAPS_CLIENT_SECRET"),
});

2. Validate authentication

var token = await client.Auth.GetAccessTokenAsync();
Console.WriteLine(token[..Math.Min(20, token.Length)]);

3. List existing instances

var instances = await client.Instances.ListAsync<object>(new InstanceListRequest
{
    Page = 1,
    PageSize = 20,
});

4. Create an instance

var created = await client.Instances.CreateAsync<object>(new InstanceCreateRequest
{
    Name = "support",
    Webhook = "https://example.com/vzaps/webhook",
    EventsSubscribe = new[] { "Message", "Connected", "Disconnected" },
});

5. Subscribe the instance

await client.Instances.SubscribeAsync<object>(
    "VZ...",
    new { plan = "direct" },
    new InstanceRequestOptions { InstanceToken = "instance-token" });
Use ResumeSubscriptionAsync to resume a subscription and CancelAsync to cancel it.

6. Pair WhatsApp

var status = await client.Sessions.StatusAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});

var qr = await client.Sessions.QrAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});

var pairCode = await client.Sessions.PairCodeAsync<object>(
    "VZ...",
    "5511999999999",
    new InstanceRequestOptions { InstanceToken = "instance-token" });

7. Configure webhook

await client.Webhooks.SetAsync<object>(new WebhookSetRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    WebhookURL = "https://example.com/vzaps/webhook",
    Events = new[] { "Message", "Connected" },
});

8. Subscribe to realtime

await using var subscription = await client.Events.SubscribeAsync(new VZapsEventSubscribeRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Events = new[] { VZapsEventType.Message, VZapsEventType.Connected },
    Reconnect = true,
    MaxRetries = 10,
});

subscription.On(VZapsEventType.Message, evt =>
{
    Console.WriteLine(evt.Id);
});

9. Send the first message

await client.Messages.SendTextAsync<object>(new SendTextMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Message = "Hello, your instance is connected.",
});

10. Send media

await client.Messages.SendImageAsync<object>(new SendImageMessageRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
    Phone = "5511999999999",
    Image = "https://cdn.example.com/photo.jpg",
    Caption = "Optional caption",
});
See Messages for text, image, audio, document, video, sticker, GIF, location, contact, buttons, list, link, and poll.

11. Check queues

await client.Queues.ListMessagesAsync<object>(new QueueRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
});

await client.Queues.ListOperationsAsync<object>(new QueueRequest
{
    InstanceId = "VZ...",
    InstanceToken = "instance-token",
});

12. Handle errors

try
{
    await client.Messages.SendTextAsync<object>(new SendTextMessageRequest
    {
        InstanceId = "VZ...",
        InstanceToken = "instance-token",
        Phone = "5511999999999",
        Message = "Hello",
    });
}
catch (VZapsAuthenticationException ex)
{
    Console.WriteLine(ex.StatusCode);
}
catch (VZapsRateLimitException ex)
{
    Console.WriteLine(ex.StatusCode);
}
catch (VZapsApiException ex)
{
    Console.WriteLine(ex.ResponseBody);
}
Every method accepts CancellationToken cancellationToken = default.