> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vzaps.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Instâncias e billing

> Criar, listar, atualizar instâncias e fluxo de billing no SDK

Use estes recursos para autenticação da conta, ciclo de vida da instância e billing.

Para sessão WhatsApp, veja [Sessão](/pt-BR/sdk/dotnet/session). Para chats, veja [Chats](/pt-BR/sdk/dotnet/chats). Para envio de mensagens, veja [Mensagens](/pt-BR/sdk/dotnet/messages).

## Auth

### `client.Auth.GetAccessTokenAsync()`

Obtém um JWT usando `ClientToken` e `ClientSecret`. O SDK cacheia e renova o token automaticamente.

```csharp theme={null}
var token = await client.Auth.GetAccessTokenAsync();
```

**Retorno:** `string` com o JWT de acesso (`accessToken` de `POST /token`).

## Instâncias e billing

### `client.Instances.CreateAsync<TResponse>(request)`

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

**Retorno:** `InstancePublicCreateResponse` — `Id`, `Name`, `token`, `Url`, `Webhook`, `EventsSubscribe`, `Status`, `CreatedAt`, `UpdatedAt`.

### `client.Instances.ListAsync<TResponse>(request?)`

```csharp theme={null}
await client.Instances.ListAsync<object>(new InstanceListRequest
{
    Page = 1,
    PageSize = 20,
    Search = "support",
});
```

**Retorno:** pagina `{ Page, Size, Total, TotalPages, Content[], Summary }`. Cada item de `content` segue o resumo publico da instancia (`Id`, `Name`, `Status`, etc.).

### `client.Instances.GetAsync<TResponse>(instanceId)`

```csharp theme={null}
await client.Instances.GetAsync<object>("VZ...");
```

**Retorno:** mesmo formato resumido de um item de `Instances.List()` (`Id`, `Name`, `token`, `Url`, `Webhook`, `Status`, etc.).

### `client.Instances.UpdateAsync<TResponse>(instanceId, body, options?)`

```csharp theme={null}
await client.Instances.UpdateAsync<object>(
    "VZ...",
    new { name = "support-updated" },
    new InstanceRequestOptions { InstanceToken = "instance-token" });
```

**Retorno:** instancia atualizada no mesmo formato resumido de `Instances.Get()`.

### `client.Instances.RestartAsync<TResponse>(instanceId, options?)`

```csharp theme={null}
await client.Instances.RestartAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});
```

**Retorno:** `InstanceActionResponse` — `InstanceId`, `Status`, `Details`.

### `client.Instances.DeleteAsync<TResponse>(instanceId, options?)`

```csharp theme={null}
await client.Instances.DeleteAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});
```

**Retorno:** corpo vazio em sucesso (`204`) ou envelope de erro padrao.

### `client.Instances.SubscribeAsync<TResponse>(instanceId, body?, options?)`

```csharp theme={null}
await client.Instances.SubscribeAsync<object>(
    "VZ...",
    new { plan = "direct" },
    new InstanceRequestOptions { InstanceToken = "instance-token" });
```

**Retorno:** `BillingHostedSession` — `Url`, `SessionId`, `mode` (`direct` ou checkout), `SubscriptionId`.

### `client.Instances.ResumeSubscriptionAsync<TResponse>(instanceId, options?)`

```csharp theme={null}
await client.Instances.ResumeSubscriptionAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});
```

**Retorno:** `{ Status: "ok" }`.

### `client.Instances.CancelAsync<TResponse>(instanceId, options?)`

```csharp theme={null}
await client.Instances.CancelAsync<object>("VZ...", new InstanceRequestOptions
{
    InstanceToken = "instance-token",
});
```

**Retorno:** `{ Message }` confirmando cancelamento ou agendamento.

## Chamadas avançadas

Use `RequestAsync<TResponse>()` quando precisar acessar um campo ou endpoint recém-publicado ainda não encapsulado por um método tipado.

```csharp theme={null}
await client.RequestAsync<object>(
    HttpMethod.Post,
    "/instances/VZ.../chat/send/text",
    new VZaps.Http.VZapsRequestOptions
    {
        InstanceToken = "instance-token",
        Body = new { phone = "5511999999999", message = "Olá" },
    });
```
