# API de Integração GET e POST

<p class="callout info">Para a documentação de programação em C# nas APIs de POST, [clique aqui](https://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/programa%C3%A7%C3%A3o-em-c---na-api-de-integra%C3%A7%C3%A3o "Programação em C# - Na API de integração")</p>

<p class="callout warning">Para Informações sobre o Timezone das Apis (fuso horário), [clique aqui](https://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/timezone-%28fuso-horario-do-sistema%29 "Timezone (Fuso Horario do sistema)")</p>

O termo API vem da abreviação do termo em inglês Application Programming Interface ou Interface de Programação de Aplicativos, o que resumidamente, significa uma forma de dois sistemas se conectarem entre si.

O agilityflow possui API Rest para que outros sistemas e aplicativos se conectem e interajam com o agilityflow. Essa interação ocorre usando dois métodos:

- **GET**: para outros sistema consumirem os dados do Agilityflow (Buscar informações)
- **POST**: para inserir e atualizar dados de outros sistemas no Agilityflow (Input de informações)

> Como posso configurar uma API no agilityflow?

Um pré-requisito para configurar uma API no agilityflow, é criar um usuário que tenha permissão para executar essa API remotamente.

### Usuário da API

Para criar um usuário da API, basta acessar o devcenter, e no quadro da API, criar em '**Usuários da Api**':

![](https://wiki.agilityflow.io/uploads/images/gallery/2021-03-Mar/scaled-840-0/image-1617204839548.png)

Ao clicar nessa tela, é apresentada a lista de usuários, onde é possível filtrar e interagir como em qualquer formulário. No topo, clique em 'Novo' e informe os seguintes dados:

- Nome: um nome para identificar o usuário. **Sugestão**: caso seja um sistema legado que irá chamar essa api, crie esse usuário com o nome do sistema legado.
- Login: nome do usuário;
- Chave de segurança: chave de acesso do usuário. Essa chave, ficará visível para que possa ser consultada e informada ao outro sistema que irá fazer uso da API;
- API: caso já exista uma API configurada, pode ser adicionada permissão a ela nesse momento;

### Configurar uma API

Acesse API de integração no devcenter e clique em [![image-1549032455512.png](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/scaled-840-0/image-1549032455512.png)](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/image-1549032455512.png) e em seguida clique em "Novo". Preencha os dados que seguem:

- Nome: identifica a configuração da API;
- Método: Post ou Get. Mais informações no próximo capítulo;
- Tipo de execução: selecione síncrona. A opção assíncrona ainda não está implementada;
- Ativo: marque para deixar habilitada, ou desmarque para desabilitar a API;
- Usuário API: selecione os usuários de API com acesso à essa configuração, e clique em [![image-1549032455512.png](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/scaled-840-0/image-1549032455512.png)](http://wiki.agilityflow.io/uploads/images/gallery/2019-02-Feb/image-1549032455512.png).

### Listar (Get) - Buscar de um formulário (versão sem uso de código)

Com esse método, você pode buscar qualquer tipo de informação de um determinado formulário.

No cadastro de API, marque o método como "Get" e clique na opção "Configurar API para Listagem"

![](https://wiki.agilityflow.io/uploads/images/gallery/2020-03-Mar/scaled-840-0/image-1583944075313.png)

Agora associe o usuário que você criou no passo anterior, para que ele tenha acesso de execução nessa API.

Na opção configurar API para listagem, selecione o formulário que você deseja recuperar os dados.

**<span style="color: #808080;">Filtros da API de GET pelo Id do formulário</span>**

<span style="color: #808080;">Além da lista completa e paginada, v</span><span style="color: #808080;">ocê pode filtrar por ID ou por IDs.</span>

<span style="color: #808080;">Todos os Ids do agilityflow são no formato de GUID, exemplo de um id: "43837013-be24-4bc9-81c1-b4cdcb6eb3dc"</span>

<span style="color: #808080;">Você pode filtrar por um ou mais ids em uma mesma chamada de API, para isso, basta</span><span style="color: #808080;"> enviar o parâmetro **id ou ids** colocando os ids, divididos por virgula, exemplo: </span>

`<span style="color: #000000;">id=43837013-be24-4bc9-81c1-b4cdcb6eb3dc,59a26b8b-6c32-4756-acb7-c1539baf65de,b9199893-7021-1446-f407-942c97d70b74</span>`

<span style="color: #808080;">ou apenas 1 id</span>

`<span style="color: #000000;">id = b9199893-7021-1446-f407-942c97d70b74</span>`

**<span style="color: #808080;">Filtros por campos do formulario</span>**

<span style="color: #808080;">Você pode filtrar por qualquer campo do formulário, os comandos de filtro são similares aos comandos de consulta do sql server e devem estar entre chaves { }</span>

`<span style="color: #000000;">filter={campo_de_numero>2 and campo_de_numero<20 and ( campo_texto='jose' or campo_texto like '%sei%' ) }</span>`

**Lembre-se: que a url da API deve estar com os caracteres especiais com enconded, exemplo da query acima na url:**

`filter={(campo_de_numero%3E2%20and%20campo_de_numero%3C20)%20and%20(%20campo_texto=%27jose%27%20or%20campo_texto%20like%20%27%sei%%27%20)%20}`

**<span style="color: #808080;">Paginação da API de GET</span>**

<span style="color: #808080;">A paginação da API é feita a cada 10 registros, para buscar a próxima página é só enviar o parâmetro **nextPage** colocando o número da página que você deseja buscar, exemplo: </span>

`<span style="color: #000000;">nextPage=2</span>`

**<span style="color: #808080;">Ordenação da API de GET</span>**

<span style="color: #808080;">É possível ordernar os dados de retorno da API usando os 2 parâmetros abaixo, exemplo: </span>

`<span style="color: #000000;"><strong>sortBy</strong>=id_do_campo</span>`

`<span style="color: #000000;"><strong>sortDirection</strong>=ASC </span>` ou <span style="color: #000000;">`<strong>sortDirection</strong>=DESC`</span>

**<span style="color: #808080;">Estrutura de retorno da API de GET</span>**

*<span style="color: #808080;">\* por uma questão de performance da API. O campo TotalRecords não será mais retornado desde Jan/2024</span>*

```JSON
{
    "paging": {
        "pageSize": 10,    	//tamanho da paginação, considere sempre 10
        "pageNumber": 1    	//página atual
        "nextPage": 2    	//próxima página a ser chamada
    },
    "result": [
        {
            "formId": "43837013-be24-4bc9-81c1-b4cdcb6eb3dc",  		//Campo Padrão: Id do formulário          
          	"createdDate": "2020-03-10 22:41:28",					//Campo Padrão: Data de criação do formulário
            "createdBy": "59a26b8b-6c32-4756-acb7-c1539baf65de",	//Campo Padrão: Id do Usuário responsável pela criação do formulário
            "modifiedDate": "2020-03-10 22:47:58",					//Campo Padrão: Data da última alteração do formulário
            "modifiedBy": "59a26b8b-6c32-4756-acb7-c1539baf65de",	//Campo Padrão: Id do Usuário responsável pela última alteração do formulário
            "workflow": {
                "currentSteps": [
                    {
                        "id": "ede6740b-b4b8-21f7-e9c3-4f765620a213",  //Campo Padrão: Id da Etapa atual do fluxo
                        "name": "Tax Payment "                              //Campo Padrão: Nome da Etapa atual do fluxo
                    },
                    {
                        "id": "9c334289-47e8-49da-93a9-c2e4871e4c3d",  //Campo Padrão: Id da Etapa atual do fluxo
                        "name": "Payment deal"                              //Campo Padrão: Nome da Etapa atual do fluxo
                    }
                  ],
                  "status": "P",									//Campo Padrão: Status do fluxo, será "A", "X" ou "P"
                  "statusName": "In progress",						//Campo Padrão: Status Name será, "Approved", "Rejected", "In progress"
             },                      
            "data": {												//Dados e campos do formulário: Muda de acordo com os campos do formulário
                "name": "john",
                "email": "john@example.com",
              	"age": "35",
              
            }
        }
    ]
}
```

Pronto! Agora é só executar.

### Cadastrar (Post)

Com esse método, você pode inserir e atualizar dados nos formulários do seu Agilityflow, aqui você deve definir o mapeamento dos dados (DE - PARA) em C#, explicitando como será feito o cadastro dos dados, quando essa API for acionada.

No cadastro de API, marque o método como "Post" e clique na opção "Configurar API para Cadastro (Post)"

![](https://wiki.agilityflow.io/uploads/images/gallery/2020-03-Mar/scaled-840-0/image-1583944329464.png)

Agora associe o usuário que você criou no passo anterior, para que ele tenha acesso de execução nessa API.

Na opção configurar API, selecione o formulário que você deseja recuperar os dados.

O código abaixo exemplifica como configurar uma API de Cadastro

<p class="callout info">Para a documentação de programação em C# nas APIs de POST, [clique aqui](https://wiki.agilityflow.io/books/manual-de-customiza%C3%A7%C3%A3o/page/programa%C3%A7%C3%A3o-em-c---na-api-de-integra%C3%A7%C3%A3o "Programação em C# - Na API de integração")</p>

```C#
    public async Task RunAsync(){
        
            //converte o conteúdo enviado no body da API para JSON
            var json = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(content);
      
            //guarda em uma variável o ID da estrutura do formulário Cliente
            var idEstruturaFormulario_CLIENTE = Guid.Parse("0b56b66a-4f6f-4ded-ad04-016d7c0724e1");
    
      		await ApiContext.LogAsync("Log Message", "logtype");   
    
            if (json != null)
            {
    
                    //verifica se o JSON recebido contém a propriedade "nome", "email" e "cel" que são necessários p cadastro
                    if (JsonHelper.HasProperty(json, "nome") && JsonHelper.HasProperty(json, "email") && JsonHelper.HasProperty(json, "cel")){
           
                        var values = new DataDictionary();
                        values.Add("nome", json["nome"].ToString());
                        values.Add("email", json["email"].ToString());
                        values.Add("cel", json["cel"].ToString());
                      
                        //salva a informação no banco de dados
                        var id = await ApiContext.SaveEntityAsync(idEstruturaFormulario_CLIENTE, values);
                        
                    }
                
            }

    		await ApiContext.LogAsync("Log Message", "logtype");
    
    }
```

### Status Header de retorno de uma API

<table border="1" id="bkmrk-cod.-mensagem-descri" style="border-collapse: collapse; width: 99.9999%; height: 318px;"><tbody><tr style="height: 31px;"><td style="width: 12.2222%; height: 31px;">**Cod.**</td><td style="width: 19.1358%; height: 31px;">**Mensagem**</td><td style="width: 68.6419%; height: 31px;">**Descrição**</td></tr><tr style="height: 37px;"><td style="width: 12.2222%; height: 37px;">400</td><td style="width: 19.1358%; height: 37px;">BadRequest</td><td style="width: 68.6419%; height: 37px;">Houve algum erro inesperado pela API, verifica se em alguma programação existe um erro de sintaxe ou algo parecido.

</td></tr><tr style="height: 176px;"><td style="width: 12.2222%; height: 176px;">401</td><td style="width: 19.1358%; height: 176px;">Unauthorized</td><td style="width: 68.6419%; height: 176px;">Possíveis causas:

- Provavelmente o usuário API que você está tentando executar não tem permissão para essa execução.
- O Accesstoken que você está usando para executar a API está vencido. O AccessToken tem uma duração máxima de 1 hora, após esse período é necessário cria-lo novamente.
- Ou você estar tentando executar uma API que não está configurada

</td></tr><tr style="height: 37px;"><td style="width: 12.2222%; height: 37px;">404</td><td style="width: 19.1358%; height: 37px;">Not Found</td><td style="width: 68.6419%; height: 37px;">Api não encontrada

</td></tr><tr><td style="width: 12.2222%;">405</td><td style="width: 19.1358%;">Method Not Allowed</td><td style="width: 68.6419%;">Possíveis causas:

- Provavelmente o usuário API que você está tentando executar não tem permissão para essa execução.
- O Accesstoken que você está usando para executar a API está vencido. O AccessToken tem uma duração máxima de 1 hora, após esse período é necessário cria-lo novamente.
- Ou você estar tentando executar uma API que não está configurada

</td></tr><tr style="height: 37px;"><td style="width: 12.2222%; height: 37px;">200</td><td style="width: 19.1358%; height: 37px;">Ok</td><td style="width: 68.6419%; height: 37px;">Deu tudo certo.

</td></tr></tbody></table>

## Exemplos de execução da API

### Exemplo GET via o software "POSTMAN"

Importe o JSON abaixo no seu Postman para executar os exemplos abaixo.

```JSON
{
	"info": {
		"_postman_id": "bd36812d-37c9-4e08-9bc0-bdc28a073fcc",
		"name": "Agilityflow API GET",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "1. Obter AccessToken",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\"username\": \"NOME_DO_USUARIO_API__COM_PERMISSAO_NESSA_API\",\"key\": \"CHAVE_DE_SEGURANÇA_DO_USUARIO_API__COM_PERMISSAO_NESSA_API\"}"
				},
				"url": {
					"raw": "https://XXXXXXXXXXXXXXXXX.agilityflow.io/api/accesstoken?",
					"protocol": "https",
					"host": [
						"XXXXXXXXXXXXXXXXX",
						"agilityflow",
						"io"
					],
					"path": [
						"api",
						"accesstoken"
					],
					"query": [
						{
							"key": "",
							"value": "",
							"disabled": true
						},
						{
							"key": "",
							"value": "",
							"disabled": true
						}
					]
				}
			},
			"response": []
		},
		{
			"name": "2. Get API",
			"protocolProfileBehavior": {
				"disableBodyPruning": true
			},
			"request": {
				"method": "GET",
				"header": [
					{
						"key": "Authorization",
						"value": "Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3VzZXJkYXRhIjoiOTdmZTM1NmItMDA5OC00ZTlhLTkwNTUtODMwMTA3YzM5NjA1IiwibmFtZWlkIjoibG9jYWxob3N0IiwibmJmIjoxNTY0NDI4NTk5LCJleHAiOjE1NjQ0Mjg2NTksImlhdCI6MTU2NDQyODU5OX0.ul7Emi7KDepfmRwWO91RQcTZQrc8r3xlMKJnLYcduEKeNRDGC7F15_-YojHfm1ogM32LjUV76MWxNXTLeJTrLw"
					},
					{
						"key": "Content-Type",
						"name": "Content-Type",
						"type": "text",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n\n}"
				},
				"url": {
					"raw": "https://XXXXXXXXXXXXXXXXX.agilityflow.io/api/data/g5e262bd-912a-4b1f-91cb-58815cfc5556?nextPage=1",
					"protocol": "https",
					"host": [
						"XXXXXXXXXXXXXXXXX",
						"agilityflow",
						"io"
					],
					"path": [
						"api",
						"data",
						"g5e262bd-912a-4b1f-91cb-58815cfc5556"
					],
					"query": [
						{
							"key": "nextPage",
							"value": "1"
						}
					]
				}
			},
			"response": []
		}
	]
}
```

Após a importação no Postman você precisará seguir alguns passos:

**Passo 1**

No Postman, abra o exemplo **"1. Obter Accesstoken"**

**Passo 2**

Você precisará fazer algumas mudanças.

**(1)** Troque o **XXXXXX**.agilityflow.io pelo seu subdomínio no agilityflow;

**(2)** Na aba "body", Troque o usuário e a chave de segurança da API que você criou. como na imagem abaixo:

![](https://wiki.agilityflow.io/uploads/images/gallery/2020-03-Mar/scaled-840-0/image-1584384862168.png)

**Passo 3 - Obter Access token para execução da API**

Por segurança, antes de cada execução de API é necessário que você gere um token para validação do usuário.

Então, agora execute essa API.

Copie o código retornado no JSON na propriedade "accessToken", usaremos esse código a seguir.

**Passo 4**

No Postman, abra o exemplo **"2. Get API"**

**Passo 5**

Você precisará fazer algumas mudanças.

**(1)** Troque o **XXXXXX**.agilityflow.io pelo seu subdomínio no agilityflow;

**(2)** Na aba "headers", clique no VALUE da Key "Authorization" e cole o código "accessToken" que geramos nos passos acima, após a palavra "Bearer ". Então o valor deverá ficar "**Bearer Accesstoken\_que\_você\_colou**".

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-07-Jul/scaled-840-0/image-1564430466896.png)

**(3)** Troque o Id da API "/data/**g5e262bd-912a-4b1f-91cb-58815cfc5556"** de exemplo pelo id da API que você acabou de criar no Agilityflow.

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-07-Jul/scaled-840-0/image-1564430513461.png)

Então, agora execute a API para visualizar os dados retornados, você pode também consultar o Log de API do agilityflow para acompanhar todas as requisições

### Exemplo em NODE de POST

Suponhamos que temos uma API no agilityflow que cadastra um cliente, as informações que a API espera é "NOME", "EMAIL" e "CEL" (celular).

O código abaixo demonstra como é feita a chamada da API através do NODE.

Para executar, é necessário ter o NODE instalado. O pacote utilizado é o "https".

Para rodar o script basta copia-lo, salvar em um arquivo com extensão .JS (exemplo: script.js) abrir o prompt de comando e executar o script da seguinte forma:

```MarkDown
node "C:\teste\script.js"
```

Abaixo o script NODE:

Para configura só troque as 4 variáveis de configuração com as seguintes informações:

<div id="bkmrk-hostname%3A%E2%A0substitua">- ****hostname:**** substitua pela sua URL do seu agilityflow
- ****accessToken\_Credential:**** aqui você coloca as credenciais (usuário da API) para execução
- ****apiID:**** id da api
- ****apiParameterBODY:**** json com as informações que você deseja enviar para API

</div>```JavaScript
var http = require("https");



//config
var hostname = 'demo123.agilityflow.io'; //substitua pela sua URL do seu agilityflow
var accessToken_Credential = { username: 'teste', key: 'teste' }; //aqui você coloca as credenciais (usuário da API) para execução 
var apiID = 'e8b5b751-774d-4283-855c-fafb8e11236d'; //id da api
var apiParameterBODY = { nome: 'JOSE DA SILVA', email: 'josedasilva@email.com.br', cel: '1199887766' } //body json com as informações que você deseja enviar para API



//recuperar o access token
function ExecuteRecuperarAccessToken(){

    var options = {
        hostname: hostname,
        // port: 443,
        path: '/api/accesstoken',
        method: 'POST',
        headers: {
            "Content-Type": "application/json",
            "cache-control": "no-cache"
           }
      };
      
    var req = http.request(options, function (res) {
      var chunks = [];
    
      res.on("data", function (chunk) {
        chunks.push(chunk);
      });
    
      res.on("end", function () {
        var body = Buffer.concat(chunks);
        var obj = JSON.parse(body);      
        if(obj.success){    
            console.log("Recuperou o Access Token",obj.accessToken);   
            ExecuteAPI(obj.accessToken) 
        }else
            LogErro("execução do access token", body.toString());            
    
      });
    });
    
    req.write(JSON.stringify(accessToken_Credential));
    req.end();
    

}




//execute a API
function ExecuteAPI(accessToken){


    var options = {
        hostname: hostname,
        // port: 443,
        path: '/api/data/'+apiID,
        method: 'POST',
        headers: {
          "Authorization": "Bearer " + accessToken,
          "Content-Type": "application/json",
            "cache-control": "no-cache"
        }
      };


      
      var req_api = http.request(options, function (res_api) {
        var chunks_api = [];
      
        res_api.on("data", function (chunk) {
          chunks_api.push(chunk);
        });
      
        res_api.on("end", function () {
          var body = Buffer.concat(chunks_api);
          var obj = JSON.parse(body);      
          if(obj.success){    
              console.log("Execução realizada com sucesso:" + body.toString());   
          }else
              LogErro("execução da api", body.toString());  
        });
      });
      
      req_api.write(JSON.stringify(apiParameterBODY));
      req_api.end();

}


function LogErro(local,log){

    console.log('==================================================================================')
    console.log('E R R O - ' + local)
    console.log('----------------------')
    console.log(log);
    console.log('==================================================================================')

}

ExecuteRecuperarAccessToken();
```

### Exemplo em PHP de POST

Suponhamos que temos uma API no agilityflow que cadastra um cliente, as informações que a API espera é "NOME", "EMAIL" e "CEL" (celular).

O código abaixo demonstra como é feita a chamada da API através do PHP.

```PHP
<?php
// header('Content-Type: application/json');


if( !isset($_POST['nome']) ||  !isset($_POST['email']) ||  $_POST['nome'] == '' ||  $_POST['email'] == '')
{
  echo '{"success": "false", "msg": "Informe o nome e o e-mail"}';
  exit(0);
}


$nome = $_POST['nome'];
$email = $_POST['email'];

$novoLead = new StdClass();
$novoLead->nome = $nome ;
$novoLead->email = $email ;
$novoLead->cel = $_POST['cel'];

$novoLead_string = json_encode($novoLead);






                  //////////////////////////////////// 01. BUSCAR O ACCESS TOKEN


                  $curl = curl_init();
        

                  curl_setopt_array($curl, array(
                    CURLOPT_URL => "https://XXXXXXXXXXXXXXX.agilityflow.io/api/accesstoken",
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_ENCODING => "",
                    CURLOPT_MAXREDIRS => 10,
                    CURLOPT_TIMEOUT => 30,
                    //------------- SLL 
                    CURLOPT_SSL_VERIFYPEER => 0,
                    CURLOPT_SSL_VERIFYHOST => 0,
                    //--------------------------
                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                    CURLOPT_CUSTOMREQUEST => "POST",
                    CURLOPT_POSTFIELDS => "{\"username\": \"cadastrar_teste_1\",\"key\": \"cadastrar_teste_1\"}",
                    CURLOPT_HTTPHEADER => array(
                      "Content-Type: application/json",
                      "cache-control: no-cache"
                    ),
                  ));


                  $response = curl_exec($curl);
                  $err = curl_error($curl);

                  curl_close($curl);


                  if ($err) {
                    echo '{"success": "false", "msg": "Não conseguimos finalizar seu cadastro. Por favor tente novamente. (0)" }';
                    exit(0);
                  }

                  $json_RESPONSE_ACCESS_TOKEN = json_decode($response);

                  if (!isset($json_RESPONSE_ACCESS_TOKEN->accessToken)){
                      echo '{"success": "false", "msg": "Não conseguimos finalizar seu cadastro. Por favor tente novamente. (1)" }';
                      exit(0);
                    }



                //////////////////////////////////// 02. EXECUTA O POST


                $curl = curl_init();

                curl_setopt_array($curl, array(
                  CURLOPT_URL => "https://XXXXXXXXXXXXXXX.agilityflow.io/api/data/b3bf7ce3-f226-4500-83cd-2873b050c742",
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_ENCODING => "",
                  CURLOPT_MAXREDIRS => 10,
                  CURLOPT_TIMEOUT => 30,
                  //------------- SLL 
                  CURLOPT_SSL_VERIFYPEER => 0,
                  CURLOPT_SSL_VERIFYHOST => 0,
                  //--------------------------
                  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                  CURLOPT_CUSTOMREQUEST => "POST",
                  CURLOPT_POSTFIELDS => $novoLead_string,
                  CURLOPT_HTTPHEADER => array(
                    "Authorization: bearer ".$json_RESPONSE_ACCESS_TOKEN->accessToken,
                    "Cache-Control: no-cache",
                    "Content-Type: application/json"
                  ),
                ));

                $response = curl_exec($curl);
                $err = curl_error($curl);

                curl_close($curl);

                if ($err) {
                  echo '{"success": "false", "msg": "Não conseguimos finalizar seu cadastro. Por favor tente novamente. (2)" }';
                  exit(0);
                }



                $json_RESPONSE_SUCCESS = json_decode($response);

                if (!isset($json_RESPONSE_SUCCESS->success)){
                  echo '{"success": "false", "msg": "Não conseguimos finalizar seu cadastro. Por favor tente novamente. (3)" }';
                  exit(0);
                }


                if ($json_RESPONSE_SUCCESS->success == false){
                  echo '{"success": "false", "msg": "Não conseguimos finalizar seu cadastro. Por favor tente novamente. (4)" }';
                  exit(0);
                }


                echo '{"success": "true", "msg": "Obrigado, recebemos seus dados aqui e já já nos falamos..." }';


                  

```

### Exemplo POST via o software "POSTMAN"

Importe o JSON abaixo no seu Postman para executar os exemplos abaixo.

```JSON
{
	"info": {
		"_postman_id": "39445fe2-1bea-46b2-9045-b32337b10030",
		"name": "Agilityflow API",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "1. Obter Accesstoken",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\"username\": \"NOME_DO_USUARIO_API__COM_PERMISSAO_NESSA_API\",\"key\": \"CHAVE_DE_SEGURANÇA_DO_USUARIO_API__COM_PERMISSAO_NESSA_API\"}"
				},
				"url": {
					"raw": "https://XXXXXXXXXXXXXXXXX.agilityflow.io/api/accesstoken?",
					"protocol": "https",
					"host": [
						"XXXXXXXXXXXXXXXXX",
						"agilityflow",
						"io"
					],
					"path": [
						"api",
						"accesstoken"
					],
					"query": [
						{
							"key": "",
							"value": "",
							"disabled": true
						},
						{
							"key": "",
							"value": "",
							"disabled": true
						}
					]
				}
			},
			"response": []
		},
		{
			"name": "2. Post API",
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Authorization",
						"value": "Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3VzZXJkYXRhIjoiOTdmZTM1NmItMDA5OC00ZTlhLTkwNTUtODMwMTA3YzM5NjA1IiwibmFtZWlkIjoibG9jYWxob3N0IiwibmJmIjoxNTY0NDI4NTk5LCJleHAiOjE1NjQ0Mjg2NTksImlhdCI6MTU2NDQyODU5OX0.ul7Emi7KDepfmRwWO91RQcTZQrc8r3xlMKJnLYcduEKeNRDGC7F15_-YojHfm1ogM32LjUV76MWxNXTLeJTrLw"
					},
					{
						"key": "Content-Type",
						"name": "Content-Type",
						"value": "application/json",
						"type": "text"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n\n\t\t\t\"id\": \"345b65d7-4c99-426c-95fc-1dd8de76cc9d\",\n\t\t\t\"nome\": \"_123458910Cargo LEGALLLLL \"\n\t\n}"
				},
				"url": {
					"raw": "https://XXXXXXXXXXXXXXXXX.agilityflow.io/api/data/b3bf7ce3-f226-4500-83cd-2873b050c742",
					"protocol": "https",
					"host": [
						"XXXXXXXXXXXXXXXXX",
						"agilityflow",
						"io"
					],
					"path": [
						"api",
						"data",
						"b3bf7ce3-f226-4500-83cd-2873b050c742"
					]
				}
			},
			"response": []
		}
	]
}
```

Após a importação no Postman você precisará seguir alguns passos:

**Passo 1**

No Postman, abra o exemplo **"1. Obter Accesstoken"**

**Passo 2**

Você precisará fazer algumas mudanças.

**(1)** Troque o **XXXXXX**.agilityflow.io pelo seu subdomínio no agilityflow;

**(2)** Na aba "body", Troque o usuário e chave de segurança da API que você criou. como na imagem abaixo:

![](https://wiki.agilityflow.io/uploads/images/gallery/2020-03-Mar/scaled-840-0/image-1584384862168.png)

**Passo 3 - Obter Access token para execução da API**

Por segurança, antes de cada execução de API é necessário que você gere um token para validação do usuário.

Então, agora execute essa API.

Copie o código retornado no JSON na propriedade "accessToken", usaremos esse código a seguir.

**Passo 4**

No Postman, abra o exemplo **"2. Post API"**

**Passo 5**

Você precisará fazer algumas mudanças.

**(1)** Troque o **XXXXXX**.agilityflow.io pelo seu subdomínio no agilityflow;

**(2)** Na aba "headers", clique no VALUE da Key "Authorization" e cole o código "accessToken" que geramos nos passos acima, após a palavra "Bearer ". Então o valor deverá ficar "**Bearer Accesstoken\_que\_você\_colou**".

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-07-Jul/scaled-840-0/image-1564430466896.png)

**(3)** Troque o Id da API "/data/**b3bf7ce3-f226-4500-83cd-2873b050c742"** de exemplo pelo id da API que você acabou de criar no Agilityflow.

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-07-Jul/scaled-840-0/image-1564430513461.png)

**(4)** Na aba "body" você pode trocar os valores que você deseja inserir ou atualizar:

![](http://wiki.agilityflow.io/uploads/images/gallery/2019-07-Jul/scaled-840-0/image-1564430624189.png)

Então, agora execute essa API e entre no seu log de API do agilityflow para acompanhar e verificar se deu certo