# API Rest

Flexbundle fornece uma API Rest personalizada para todos os workspaces. Para saber como comunicar com seu workspace, deve seleccionar a opção  **Recursos API**. Esta opção pode ser encontrada nos detalhes de um workspace.

![](/files/-MYLN0Evz4iIlvvBjgaC)

Após selecção desta opção a seguinte página é apresentada:

![](/files/-MYPWZFPMumC04OLkDFD)

**1** - O id do workspace.

**2** - O *endpoint* a utilizar para comunicar com o workspace.

**3** - Mapeamento dos campos, ou seja, em que campo cada informação deve ser enviada.

Com a sua [**chave API**](/programar-com-flexbundle/gerar-api-key.md) e a informação dos recursos API acima indicada, poderá efetuar comunicar com Flexbundle via **Restful JSON API**.

### Criar um objecto

Para criar um novo objecto, é necessário efetuar um pedido `POST` contendo os dados do objecto que se pretende criar em conformidade com as regras de validação dos campos do workspace.

**Pedido**

```
curl -X POST \
https://api.flexbundle.com/v1/workspace/:workspace_id \
 -H '-u: <API KEY>' \
 -H 'content-type: application/json' \
 -H 'Accept: application/json' \
 -d '{ 
   "col1": "<Name>", 
   "col2": "<Email>", 
   "col3": "<Company", 
   "col4": "<Additional Info>"
 }'
```

**Resposta**

`Status: 201 Created`

```
{
    "id": "<ID>",
    "col1": "<Name>", 
    "col2": "<Email>", 
    "col3": "<Company", 
    "col4": "<Additional Info>"
}
```

{% hint style="info" %}
Quando um workspace possui um workflow associado, ao payload do pedido (JSON), deve ser enviado o parâmetro **wf\_order** que, por sua vez, representa o nº da etapa (fase) onde o objecto deve ser criado.
{% endhint %}

### Editar um objecto

Para editar um objecto, é necessário efetuar um pedido `PUT` contendo os novos dados do objecto.

**Pedido**

```
curl -X PUT \
https://api.flexbundle.com/v1/workspace/:workspace_id/:object_id \
 -H '-u: <API KEY>' \
 -H 'content-type: application/json' \
 -H 'Accept: application/json' \
 -d '{ 
   "col1": "<Name>", 
   "col2": "<Email>", 
   "col3": "<Company", 
   "col4": "<Additional Info>"
 }'
```

**Resposta**

`Status: 200 OK`

```
{
    "id": "<ID>",
    "col1": "<Name>", 
    "col2": "<Email>", 
    "col3": "<Company", 
    "col4": "<Additional Info>"
}
```

{% hint style="info" %}
Quando um workspace possui um workflow associado, ao payload do pedido (JSON), pode ser enviado o parâmetro wf\_order que, por sua vez, representa o nº da etapa (fase) onde o objecto deve ser movido.
{% endhint %}

### Buscar um objecto

Para buscar um objecto, é necessário efetuar um pedido `GET` passando o id do objecto como parâmetro.

**Pedido**

```
$ curl -X GET \
https://api.flexbundle.com/v1/workspace/:workspace_id/:object_id \
 -H '-u: <API KEY>' \
 -H 'content-type: application/json' \
 -H 'Accept: application/json' \
```

**Resposta**

`Status: 200 OK`

```
{
    "id": "<ID>",
    "col1": "<Name>", 
    "col2": "<Email>", 
    "col3": "<Company", 
    "col4": "<Additional Info>"
}
```

### **Apagar** um objecto

Para apagar um objecto, é necessário efetuar um pedido `DELETE` passando o id do objecto como parâmetro.

**Pedido**

```
$ curl -X DELETE \
https://api.flexbundle.com/v1/workspace/:workspace_id/:object_id \
 -H '-u: <API KEY>' \
 -H 'content-type: application/json' \
 -H 'Accept: application/json'
```

**Resposta**

`Status: 200 OK`

### **Pesquisar** objectos

Para pesquisar objectos de um workspace, é necessário efetuar um pedido `GET`.

**Pedido**

```
curl -G -X GET \
https://api.flexbundle.com/v1/workspace/0600000587/object?fields=&query={%22col5%22:%20%20%22flexbundle.com%22}&limit=1&sort=-col7 \
 -H '-u: <API KEY>' \
 -H 'content-type: application/json' \
 -H 'Accept: application/json' \
 --data-urlencode 'fields=col7,$count(id)' \
 --data-urlencode 'query={"col5": {"$eq": "flexbundle.com"}' \
 --data-urlencode 'sort=-col7' \
 --data-urlencode 'limit=2' 
```

**Resposta**

`Status: 200 OK`

```
[
    {
        "col7": "Twitter",
        "$count(id)":10
    },
    {
        "col7": "Facebook",
        "$count(id)":5
    }
]
```

Para operações de pesquisa, existem várias opções que podem ser configurados de modo a aproximar ao máximo das operações que podem ser efetuadas numa query SQL. Os seguintes parâmetros podem ser configurados:

* `fields`: A lista de campos, separados por vírgula a retornar como resposta à operação de pesquisa. Quando não fornecido, Flexbundle retornará todos os campos;
* `query`: Filtros de pesquisa;
* `sort`: Parâmetro utilizado para ordernar os resultados da pesquisa. Utilize `-<CAMPO>` para ordenar os resultados de forma descendente utilizando o campo especificado ou `+<Campo>` para order de forma ascendente;
* `limit`: O número máximo de objectos à retornar como resultado. Por defeito, o sistema retorna no máximo 50 objectos; e
* `offset`: O número de objectos a ignorar antes de retornar a lista de objectos.

{% hint style="info" %}
Utilize combinações de **limit** e **offset** para efetuar operações de paginação de dados.
{% endhint %}

#### **Filtros de pesquisa**

Existem várias opções que podem ser utilizadas para filtrar os objectos numa operação pesquisa:

* `$eq`: Verifica se o valor do campo é igual ao valor fornecido para o filtro;
* `$ne`: Verifica se o valor do campo é diferente ao valor fornecido para o filtro;
* `$gt`: Verifica se o valor do campo é maior que o valor fornecido para o filtro;
* `$gte`: Verifica se o valor do campo é maior ou igual  que o valor fornecido para o filtro;
* `$lt`: Verifica se o valor do campo é menor que o valor fornecido para o filtro;
* `$lte`: Verifica se o valor do campo é menor ou igual  que o valor fornecido para o filtro;
* `$li`: Verifica se o valor do campo contém as palavras chaves fornecido para o filtro. Para as palavras chaves do filtro, utilize `%` antes, entre e depois para melhor expressar a condição pretendida;
* `$nl`: Verifica se o valor do campo não contém as palavras chaves fornecido para o filtro. Para as palavras chaves do filtro, utilize `%` antes, entre e depois para melhor expressar a condição pretendida;

  `$in`: Verifica se o valor do campo encontra-se na lista de valores fornecida para o filtro. A lista de valores deverá sem expressada utilizando um array. Por exemplo, `["Support","Feature"]`&#x20;
* `$nin`: Verifica se o valor do campo não existe na lista de valores fornecida para o filtro. A lista de valores deverá sem expressada utilizando um array. Por exemplo: `["Support","Feature"]`

#### Queries analíticas

Utilizando o parâmetro `fields` , é possível efetuar queries analíticas aos objectos do workspace. São disponibilizadas as seguintes operações:

* `$count`: Executa uma  contagem;
* `$sum`: Executa um somatório de um campo numérico;
* `$min`: Encontra o  valor mínimo de um campo numérico ou data;
* `$max`: Encontra o  valor mínimo de um campo numérico ou data;&#x20;
* `$avg`: Calcula a média dos  valores de um campo numérico;
* `$day`: Extraí o dia de um campo data;
* `$week`: Extraí a semana de um campo data;
* `$month`: Extraí o mês de um campo data;
* `$quarter`: Extraí o trimestre de um campo data;
* `$year`: Extraí o ano de um campo data;

{% hint style="info" %}
Combine filtros e *queries* analíticas para obter respostas poderosas com os dados existentes em seus workspaces. Por exemplo, pode obter respostas como: o nº de vendas por região.
{% 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://help.flexbundle.com/programar-com-flexbundle/api-rest.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.
