> ## 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/go/session). Para chats, veja [Chats](/pt-BR/sdk/go/chats). Para envio de mensagens, veja [Mensagens](/pt-BR/sdk/go/messages).

Campos comuns em chamadas de instância:

| Campo           | Tipo     | Obrigatório | Descrição                                       |
| --------------- | -------- | ----------- | ----------------------------------------------- |
| `InstanceID`    | `string` | Sim         | ID da instância (path ou campo da struct).      |
| `InstanceToken` | `string` | Sim         | Token da instância (header `X-Instance-Token`). |

Todos os métodos de recurso aceitam `context.Context` como primeiro argumento.

## Auth

### `Auth.GetAccessToken(ctx)`

Obtém JWT com `ClientToken` e `ClientSecret`. Na maioria dos fluxos, recursos fazem isso automáticamente.

```go theme={null}
token, err := client.Auth.GetAccessToken(ctx)
fmt.Println(token[:16])
```

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

## Instâncias e billing

### `Instances.Create(ctx, req)`

```go theme={null}
created, err := client.Instances.Create(ctx, vzaps.InstanceCreateRequest{
	Name:            "Suporte",
	Webhook:         "https://example.com/webhooks/vzaps",
	EventsSubscribe: []string{"Message", "Connected", "Disconnected"},
})
```

**Retorno:** `InstancePublicCreateResponse` — `id`, `name`, `token`, `url`, `webhook`, `events_subscribe`, `status`, `created_at`, `updated_at`.

### `Instances.List(ctx, req)`

```go theme={null}
instances, err := client.Instances.List(ctx, vzaps.InstanceListRequest{
	Page:     1,
	PageSize: 20,
	Search:   "support",
})
```

**Retorno:** pagina `{ page, size, total, total_pages, content[], summary }`. Cada item de `content` segue o resumo publico da instancia (`id`, `name`, `status`, etc.).

### `Instances.Get(ctx, instanceID)`

Retorna uma instância no mesmo formato público de cada linha de `Instances.List()`.

```go theme={null}
instance, err := client.Instances.Get(ctx, "VZ...")
```

**Retorno:** mesmo formato resumido de um item de `instances.list()` (`id`, `name`, `token`, `url`, `webhook`, `status`, etc.).

### `Instances.Update(ctx, instanceID, body, options)`

```go theme={null}
_, err := client.Instances.Update(ctx, "VZ...", map[string]any{
	"name": "Suporte Comercial",
}, vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

**Retorno:** instancia atualizada no mesmo formato resumido de `instances.get()`.

### `Instances.Restart(ctx, instanceID, options)`

```go theme={null}
_, err := client.Instances.Restart(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

**Retorno:** `InstanceActionResponse` — `instance_id`, `status`, `details`.

### `Instances.Delete(ctx, instanceID, options)`

```go theme={null}
_, err := client.Instances.Delete(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

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

### `Instances.Subscribe(ctx, instanceID, body, options)`

```go theme={null}
checkout, err := client.Instances.Subscribe(ctx, "VZ...", nil, vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

**Retorno:** `BillingHostedSession` — `url`, `session_id`, `mode` (`direct` ou checkout), `subscription_id`.

### `Instances.ResumeSubscription(ctx, instanceID, options)`

```go theme={null}
_, err := client.Instances.ResumeSubscription(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

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

### `Instances.Cancel(ctx, instanceID, options)`

```go theme={null}
_, err := client.Instances.Cancel(ctx, "VZ...", vzaps.InstanceOptions{
	InstanceToken: "instance-token",
})
```

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

## Chamadas avançadas

Use `client.Request()` quando precisar de uma operação ainda não encapsulada em um recurso:

```go theme={null}
err := client.Request(ctx, method, path, vzaps.RequestOptions{}, &out)
```

Para o contrato HTTP completo, use a aba [API](/pt-BR/api-reference/introduction).
