# Feature Flags

Este tópico descreve como funcionam as *Feature Flags* no nosso serviço e como tratar as exceções que elas podem causar.

### O que são Feature Flags?

*Feature Flags* são ferramentas que permitem habilitar ou desabilitar funcionalidades de software dinamicamente, sem a necessidade de alterar o código ou reiniciar o serviço. Elas são utilizadas no nosso sistema para:

* **Lançamento Contínuo**: Implementar novas funcionalidades de forma gradual, reduzindo riscos.
* **Hotfixes**: Desativar rapidamente uma funcionalidade problemática sem a necessidade de parar todas as funções.

{% hint style="info" %}
**Aviso**

Quando é realizado um lançamento contínuo de funcionalidades por nossa parte, pode ser que alguns dos usuários da sua organização tenham acesso enquanto outros não, isso é gerenciado automaticamente pelo sistema e não há opção de controle disto.
{% endhint %}

### Como saber quais funcionalidades estão ativas

Para buscar uma lista de funcionalidades ativas para um usuário você pode usar a rota: `GET /v1/feature-flags`(Clique para detalhes), nela são listadas todas as funcionalidades e seu estado atual para o usuário logado.

{% hint style="info" %}
**Recomendação**

É altamente recomendado realizar o *caching* dos dados retornados pelo sistema, isso evita problemas com o ***Rate Limitter***. Também é importante destacar que os dados retornados só serão renovados **60 segundos** após a ultima chamada, devido a um caching interno.
{% endhint %}

### Como tratar exceções de Feature Flags?

Sempre que uma funcionalidade estiver desativada por uma *Feature Flag*, será retornada a seguinte resposta:

```json
{
  "code": "FEATURE_FLAG_DISABLED",
  "message": "A funcionalidade "Criar cliente" está atualmente indisponível, tente acessar novamente mais tarde",
  "status_code": 503,
  "timestamp": "2024-08-06T13:13:22.139Z",
  "path": "/api/v1/customers",
  "handled": true,
  "errors": []
}
```

Note que o ErrorCode `FEATURE_FLAG_DISABLED` e o StatusCode `503` sempre serão os mesmos, facilitando a identificação e o tratamento dessa exceção.

{% hint style="info" %}
Você pode obter mais informações sobre as manutenções e problemas que ocorrem no nosso serviço através da página [status.altpaybr.com.br](https://status.altpaybr.com.br), onde todos os incidentes são explicados em detalhes.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.altpaybr.com.br/documentation/api-operation/markdown.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
