Introdução
Olá, bem vindo a documentação da API Onfly!
Através das nossas APIs você conseguirá acessar grande parte dos nossos serviços e integrar facilmente sua aplicação com a nossa.
Nós utilizamos o padrão REST HTTP, atualmente todos nossos endpoints necessitam de autenticação ;-)
Há, estamos melhorando continuamente nossas APIs e fazemos um grande esforço para manter esta documentação atualizada.
Caso você tenha alguma sugestão de melhoria, pode mandar pra gente: devs@onfly.com.br
A gente vai amar receber sugestões \o/
Ps:. Existem 2 grandes desafios clássicos em ciência da computação, que é dar nome as coisas e invalidar cache ;-) Agora, descobrimos uma terceira, que é manter a API atualizada, pedimos desculpas caso você encontre alguma info na API que não esteja atualizada aqui!
O que dá para fazer com nossa API?
- Automatizar lançamentos do RDVs direto no ERP (Olha o que fizemos com a OMIE)
- Integrar outras despesas acessórias para dentro da Onfly, para entrar no fluxo de aprovação (99, Uber, Ifood)
- Integrar dados de viagens com seu CRM, para ver exatamente quanto custou uma viagem para determinado cliente
- Colocar projetos do ERP dentro da Onfly
- Adicionar ou remover usuários automaticamente
Nossa API hoje é dividida em 6 módulos
- Autenticação - Autenticar para usar a API
- Configurações da Empresa - Info geral como usuários, configurações, tags e centro de custos
- Módulo de Despesas - Info de Expense (despesas, rdvs, aprovações)
- Módulo de Travel - Info de Travel (viajantes, reservas de aéreo e hotel)
- Budget - Gestão de buget da empresa
- Geral - Info sobre códigos, anexos, etc...
E ainda temos uma seção exclusiva para códigos que são usados como parâmetros nas requisições.
Exemplos de utilização
Temos alguns exemplos prontos para usar a nossa API em Google Docs (sim, a gente se diverte usando Google Script) e via POSTMAN, se quiser, só dar um alô pra gente que enviamos todos nossos exemplos de requests + response, beleza?
Autenticação
Nossa autenticação é baseada nos principios OAUTH2. Primeiro é nessessario que você obtenha seu CLIENT ID e CLIENT SECRET para isso basta entrar em contato com nosso atendimento que iremos fornecê-la, para conseguir seu token de autenticação envie a seguinte requisição para o endpoint
Requisição:
{
"grant_type": "client_credentials",
"scope": "*",
"client_id": "{{client_id}}",
"client_secret": "{{client_secret}}"
}
curl --location --request POST 'http://api.onfly.com.br/oauth/token' \
--header 'Content-Type: application/json' \
--data-raw '{
"grant_type": "client_credentials",
"scope": "*",
"client_id": "client_id",
"client_secret": "token"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
[
"grant_type" => "client_credentials",
"scope" => "*",
"client_id" => "{{client_id}}",
"client_secret" => "{{client_secret}}"
]
])
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\r\n \"grant_type\": \"client_credentials\",\r\n \"scope\": \"*\",\r\n \"client_id\": \"1\",\r\n \"client_secret\": \"token\"\r\n}"
headers = {
'Content-Type': 'application/json'
}
conn.request("POST", "/oauth/token", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
let raw = JSON.stringify({"grant_type":"client_credentials","scope":"*","client_id":"1","client_secret":"token"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/oauth/token", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Garanta que você está substituindo as variáveis {{client_id}} e {{client_secret}} pelas suas credenciais:
Resposta:
{
"token_type": "Bearer",
"expires_in": 31622400,
"access_token": "{auth_token}"
}
HTTP Request
POST https://api.onfly.com.br/oauth/token
Corpo da Requisição
Parameter | Default | Description |
---|---|---|
grant_type | false | Tipo de autorização desejada, atualmente nos suportamos apenas "client_credentials" |
scope | false | O escopo de sua autenticação, na nossa versão atual da API aplicamos apenas "*" |
client_id | false | O seu client id adquirido com nossa equipe de tecnologia |
client_secret | false | O seu client secret adquirido com nossa equipe de tecnologia |
Nós iremos te responder com um token de autenticação, esse token deve ser enviado no HEADER de toda requisição aos nossos endpoints, assim como mostrado abaixo
Note que este token expira em 1 ano.
Configurações da Empresa
Dentro da API de Configurações da empresa é possível:
- Cadastrar, convidar, editar, remover colaboradores (usuários);
- Gerenciar grupos de usuário;
- Gerenciar centros de custo;
- Gerenciar tags (projetos, lojas, clientes, etc...)
Colaboradores
Busca todos os colaboradores
Requisição
GET https://api.onfly.com.br/employees
curl --location --request GET 'https://api.onfly.com.br/employees' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/employees",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token",
"Content-Type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
url = "https://api.onfly.com.br/employees"
headers = {
'Authorization': 'Bearer token',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/employees", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 12,
"name": "Apolo Doutrinador",
"email": "marcelo+t12@onfly.com.br",
"avatar": "https://app.onfly.com.br/images/users/default.png",
"role": "teste",
"groupId": 0,
"permission": "Administrador",
"createdAt": "2020-05-21 17:09:09",
"updatedAt": "2020-05-21 17:09:09"
}
]
}
Requisição HTTP
GET https://api.onfly.com.br/employees
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
include | - | não | A inclusão disponível é ["group"] |
Convidar colaborador
Este endpoint cria um colaborador e envia um email de cadastro para que o colaborador possa completar seu cadastro.
Requisição:
{
"email": "jonhdoe@onfly.com.br",
"permission": "employee",
"role": "Desenvolvedor",
"groupId": 1
}
curl --location --request POST 'http://api.onfly.com.br/employees/invite' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"email": "jonhdoe@onfly.com.br",
"permission": "employee",
"role": "Desenvolvedor",
"groupId": 1
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/employees/invite",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"email\": \"jonhdoe@onfly.com.br\",\n\t\"permission\": \"employee\",\n\t\"role\": \"Desenvolvedor\",\n\t\"groupId\": 1\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"email\": \"jonhdoe@onfly.com.br\",\n\t\"permission\": \"employee\",\n\t\"role\": \"Desenvolvedor\",\n\t\"groupId\": 1\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/employees/invite", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"email":"jonhdoe@onfly.com.br","permission":"employee","role":"Desenvolvedor","groupId":1});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/employees/invite", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 14,
"name": null,
"email": "jonhdoe@onfly.com.br",
"role": "Desenvolvedor",
"groupId": 1,
"permission": "employee",
"createdAt": "2020-01-20 22:43:24",
"updatedAt": "2020-01-20 22:43:24"
}
}
Requisição HTTP
POST https://api.onfly.com.br/employees/invite
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
- | Sim | Email do colaborador. Max: 240 chars Alpha-Numérico - Unico |
|
role | - | Não | Função do colaborador dentro de sua empresa. Min: 3 chars - Max: 240 chars Alpha-Numérico |
permission | - | Sim | Permissão deste colaborador para mais informações veja nesta documentação Geral/Enums/Permissões de usuários. Alpha-Numérico |
groupId | - | Sim | Id do grupo no qual esse usuário pertence. Inteiro |
include | - | Não | A inclusão disponível é ["group"] |
Criar colaborador
Requisição:
{
"name": "John Pass",
"firstName": "John",
"lastName": "Pass",
"password": "12345678",
"birthday": "1999-01-15",
"document": {
"value": "78060918079",
"type" : "1"
},
"email": "jonhdoe+2@onfly.com.br",
"permission": "employee",
"role": "Desenvolvedor",
"groupId": 1
}
curl --location --request POST 'http://api.onfly/employees/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "John Pass",
"firstName": "John",
"lastName": "Pass",
"password": "12345678",
"birthday": "1999-01-15",
"document": {
"value": "78060918079",
"type" : "1"
},
"email": "jonhdoe+2@onfly.com.br",
"permission": "employee",
"role": "Desenvolvedor",
"groupId": 1
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly/employees/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"John Pass\",\n\t\"firstName\": \"John\",\t\n\t\"lastName\": \"Pass\",\t\n\t\"password\": \"12345678\",\t\n\t\"birthday\": \"1999-01-15\",\t\n\t\"document\": {\n\t\t\"value\": \"78060918079\",\n\t\t\"type\" : \"1\"\n\t},\t\n\t\"email\": \"jonhdoe+2@onfly.com.br\",\n\t\"permission\": \"employee\",\n\t\"role\": \"Desenvolvedor\",\n\t\"groupId\": 1\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly")
payload = "{\n\t\"name\": \"John Pass\",\n\t\"firstName\": \"John\",\t\n\t\"lastName\": \"Pass\",\t\n\t\"password\": \"12345678\",\t\n\t\"birthday\": \"1999-01-15\",\t\n\t\"document\": {\n\t\t\"value\": \"78060918079\",\n\t\t\"type\" : \"1\"\n\t},\t\n\t\"email\": \"jonhdoe+2@onfly.com.br\",\n\t\"permission\": \"employee\",\n\t\"role\": \"Desenvolvedor\",\n\t\"groupId\": 1\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/employees/create", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"John Pass","firstName":"John","lastName":"Pass","password":"12345678","birthday":"1999-01-15","document":{"value":"78060918079","type":"1"},"email":"jonhdoe+2@onfly.com.br","permission":"employee","role":"Desenvolvedor","groupId":1});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly/employees/create", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 15,
"name": "John Pass",
"email": "jonhdoe@onfly.com.br",
"role": "Desenvolvedor",
"groupId": 1,
"permission": "employee",
"createdAt": "2020-01-20 22:46:25",
"updatedAt": "2020-01-20 22:46:25"
}
}
Requisição HTTP
POST https://api.onfly.com.br/employees
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
- | Sim | Email do colaborador. Max: 240 chars Alpha-Numérico - Unico |
|
name | - | Sim | Nome completo do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
firstName | - | Sim | Primeiro nome do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
lastName | - | Sim | Sobrenome do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
password | - | Sim | Senha do colaborador. Min: 8 chars - Max: 240 chars Alpha-Numérico |
birthday | - | Sim | Data de nascimento do colaborador dentro de sua empresa. Formato: yyyy-mm-dd Alpha-Numérico |
document | - | Sim | Documento do colaborador à ser inserido na plataforma |
document.value | - | Sim | Numero do documento do colaborador. Min: 3 chars Alpha-Numérico - Unico |
document.type | - | Sim | Tipo do documento do colaborador, para ver os tipos aceitos basta ir em /Geral/Enums. Min: 1 chars Inteiro |
role | - | Não | Função do colaborador dentro de sua empresa. Min: 3 chars - Max: 240 chars Alpha-Numérico |
permission | - | Sim | Permissão deste colaborador para mais informações veja nesta documentação Geral/Enums/Permissões de usuários. Alpha-Numérico |
groupId | - | Sim | Id do grupo no qual esse usuário pertence. Inteiro |
include | - | Não | A inclusão disponível é ["group"] |
Editar colaborador
Não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente o nome basta enviar apenas o campo name atualizado, não é possível atualizar o email e CPF do colaborador através desta API caso se encontre em uma situação que isso seja necessário entre em contato com o nosso time de TI
Requisição:
{
"permission": "manager",
"groupId": 2
}
curl --location --request POST 'http://api.onfly.com.br/employees/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"permission": "manager",
"groupId": 2
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/employees/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"manager\": \"employee\"\n\t\"groupId\": 2\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"permission\": \"manager\",\n\t\"groupId\": 2\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/employees/create", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"permission":"manager","groupId":2});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/employees/create", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 15,
"name": "John Doe",
"email": "jonhdoe@onfly.com.br",
"role": "Desenvolvedor",
"groupId": 2,
"permission": "manager",
"createdAt": "2020-01-20 22:46:25",
"updatedAt": "2020-01-20 22:48:09"
}
}
Requisição HTTP
PUT https://api.onfly.com.br/employees/{employeesId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Não | Nome completo do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
firstName | - | Não | Primeiro nome do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
lastName | - | Não | Sobrenome do colaborador. Min: 3 chars - Max: 190 chars Alpha-Numérico |
password | - | Não | Senha do colaborador. Min: 8 chars - Max: 240 chars Alpha-Numérico |
birthday | - | Não | Data de nascimento do colaborador dentro de sua empresa. Formato: yyyy-mm-dd Alpha-Numérico |
role | - | Não | Função do colaborador dentro de sua empresa. Min: 3 chars - Max: 240 chars Alpha-Numérico |
permission | - | Não | Permissão deste colaborador para mais informações veja nesta documentação Geral/Enums/Permissões de usuários. Alpha-Numérico |
groupId | - | Não | Id do grupo no qual esse usuário pertence. Inteiro |
include | - | Não | A inclusão disponível é ["group"] |
Grupos
Requisição:
GET http://api.onfly.com.br/employee-groups
curl --location --request POST 'http://api.onfly.com.br/employee-groups' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "Operações"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/employee-groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"Operações\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token",
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"name\": \"Operações\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token',
}
conn.request("POST", "/employee-groups", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"Operações"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/employee-groups", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 5,
"name": "Operações",
"employeesIds": [],
"createdAt": "2020-01-20 22:54:44",
"updatedAt": "2020-01-20 22:54:44"
}
}
Criar grupo
Requisição HTTP
POST https://api.onfly.com.br/employee-groups
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Sim | Nome do grupo. Min: 3 chars - Max: 190 chars Alpha-Numerico - Unico |
include | - | Não | A inclusão disponível é ["employees"] |
Editar grupo
Não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente a data basta enviar apenas o campo date atualizado
Requisição:
{
"name": "Vendas"
}
curl --location --request POST 'http://api.onfly.com.br/employee-groups' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "Vendas"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/employee-groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"Vendas\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token",
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"name\": \"Vendas\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token',
}
conn.request("POST", "/employee-groups", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"Vendas"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/employee-groups", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 5,
"name": "Vendas",
"employeesIds": [],
"createdAt": "2020-01-20 22:54:44",
"updatedAt": "2020-01-20 22:57:25"
}
}
Busca todos os grupos
Requisição HTTP
GET https://api.onfly.com.br/employee-groups
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
include | - | não | A inclusão disponível é ["employees"] |
Requisição HTTP
PUT https://api.onfly.com.br/employee-groups/{groupId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Não | Nome do grupo. Min: 3 chars - Max: 190 chars Alpha-Numerico - Unico |
include | - | Não | A inclusão disponível é ["employees"] |
Deletar grupo
Requisição HTTP
DELETE https://api.onfly.com.br/employee-groups/{groupId}
Centro de Custo
Requisição:
{
"name": "SQUAD 200"
}
curl --location --request POST 'http://api.onfly.com.br/settings/cost-center' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "SQUAD 200"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/settings/cost-center",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"SQUAD 200\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"name\": \"SQUAD 200\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/settings/cost-center", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"SQUAD 200"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/settings/cost-center", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 8,
"name": "SQUAD 200",
"createdAt": "2020-01-20 23:24:23",
"updatedAt": "2020-01-20 23:24:23"
}
}
Busca todos os centros de custo
Requisição HTTP
GET https://api.onfly.com.br/settings/cost-center
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
Criar centro de custo
Requisição HTTP
POST https://api.onfly.com.br/settings/cost-center
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Sim | Nome do centro de custo. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
Editar centro de custo
Não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente a data basta enviar apenas o campo date atualizado
Requisição HTTP
PUT https://api.onfly.com.br/settings/cost-center/{costCenterId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Não | Nome do centro de custo. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
Deletar centro de custo
Para deletar o centro de custo entre em contato com nosso time de TI.
Tag
Busca todas as tags
Requisição HTTP
GET https://api.onfly.com.br/settings/tag
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
Criar tag
Requisição:
{
"name": "UBER",
"icon": "mdi-car"
}
curl --location --request POST 'http://api.onfly.com.br/settings/tag' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "UBER",
"icon": "mdi-car"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/settings/tag",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"UBER\",\n\t\"icon\": \"mdi-car\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"name\": \"UBER\",\n\t\"icon\": \"mdi-car\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/settings/tag", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"UBER","icon":"mdi-car"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/settings/tag", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 5,
"name": "UBER",
"icon": "mdi-car",
"iconImageLink": "http://api.onfly.com.br/settings/tag/icon/image/mdi-car",
"createdAt": "2020-01-20 23:29:59",
"updatedAt": "2020-01-20 23:29:59"
}
}
Requisição HTTP
POST https://api.onfly.com.br/settings/tag
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Sim | Nome da tag. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
icon | mdi-tag | Não | Icone grafico para representar o centro, para mais informações leia nesta documentação Geral/Icone. Alpha-Numérico |
Editar centro de custo
Não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente a data basta enviar apenas o campo date atualizado
Requisição:
{
"name": "99"
}
curl --location --request POST 'http://api.onfly.com.br/settings/tag' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "99",
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/settings/tag",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"name\": \"99\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"name\": \"99\"\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/settings/tag", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"99"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/settings/tag", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 6,
"name": "99",
"icon": "mdi-car",
"iconImageLink": "http://api.onfly.com.br/settings/tag/icon/image/mdi-car",
"createdAt": "2020-01-20 23:30:41",
"updatedAt": "2020-01-20 23:30:41"
}
}
Requisição HTTP
PUT https://api.onfly.com.br/settings/tag/{tagId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Sim | Nome da tag. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
icon | mdi-tag | Não | Icone grafico para representar o centro, para mais informações leia nesta documentação Geral/Icone. Alpha-Numérico |
Deletar tag
Para uma tag entre em contato com nosso time de TI.
Expense
Exemplos de chamadas para recuperar dados
GET https://api.onfly.com.br/expense/expenditure
GET https://api.onfly.com.br/expense/expenditure/{expenditure}
GET https://api.onfly.com.br/expense/expenditure-type
GET https://api.onfly.com.br/expense/rdv
GET https://api.onfly.com.br/expense/rdv/{rdvId}
GET https://api.onfly.com.br/a/rdv/{rdvId}
GET https://api.onfly.com.br/expense/advance-payment
GET https://api.onfly.com.br/expense/advance-payment/{advancePaymentId}
POST https://api.onfly.com.br/expense/send-to-approval/{advancePaymentId}
Exemplos de chamadas para salvar dados
POST https://api.onfly.com.br/expense/expenditure
POST https://api.onfly.com.br/expense/expenditure-type
POST https://api.onfly.com.br/expense/rdv
Dentro deste módulo será possível recuperar e persistir informações relacionados a despesas de viagens.
- Listar Despesas;
- Listar RDVs;
- Listar tipos de despesas;
- Cadastrar despesas;
- Cadastrar RDVs;
- Cadastrar tipos de despesas;
Despesa
Todo o modulo de despesas vem com a funcionalidade de include objetos por exemplo: Caso eu queria que junto as despesas retorna o usuario que cadastrou ela basta eu colocar o parâmetro include=user na requisição
Busca todas as despesas
Requisição
GET https://api.onfly.com.br/expense/expenditure
curl --location --request GET 'https://api.onfly.com.br/expense/expenditure?include=permissions,expenditureType,rdv&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startOccurrenceDate=2020-05-01&endOccurrenceDate=2021-05-31' \
--header 'Authorization: Bearer token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/expense/expenditure?include=permissions,expenditureType,rdv&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startOccurrenceDate=2020-05-01&endOccurrenceDate=2021-05-31",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token",
"Content-Type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
headers = {
'Authorization': 'Bearer token',
'Content-Type': 'application/x-www-form-urlencoded'
}
conn.request("GET", "/expense/expenditure?include=permissions,expenditureType,rdv&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startOccurrenceDate=2020-05-01&endOccurrenceDate=2021-05-31", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/expense/expenditure?include=permissions,expenditureType,rdv&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startOccurrenceDate=2020-05-01&endOccurrenceDate=2021-05-31", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 17770,
"description": "teste com Marcelo",
"date": "2020-05-25",
"amount": 5000,
"isReimbursable": true,
"receipts": [
"RC20631T"
],
"rdvId": null,
"isValid": true,
"userId": 13,
"expenditureTypeId": 1,
"expenditureType": {
"data": {
"id": 1,
"name": "Alimentação",
"icon": "mdi-food-fork-drink",
"createdAt": "2018-08-30 17:11:40",
"updatedAt": "2020-01-25 09:18:08"
}
},
"permissions": {
"show": true,
"edit": true,
"delete": true
},
"createdAt": "2020-05-25 16:32:54",
"updatedAt": "2020-05-25 16:32:54"
},
{
"id": 17669,
"description": "Teste",
"date": "2020-05-14",
"amount": 2555,
"isReimbursable": true,
"receipts": [
"RC20505C"
],
"rdvId": 3833,
"isValid": false,
"userId": 22,
"expenditureTypeId": 3,
"expenditureType": {
"data": {
"id": 3,
"name": "Materiais de Escritório",
"icon": "mdi-crown",
"createdAt": "2018-08-30 17:12:33",
"updatedAt": "2020-05-15 17:34:33"
}
},
"permissions": {
"show": true,
"edit": false,
"delete": false
},
"createdAt": "2020-05-20 17:02:22",
"updatedAt": "2020-05-22 13:53:49",
"rdv": {
"data": {
"id": 3833,
"name": "teste",
"protocol": "#20203833",
"motive": "teste",
"ownerId": 22,
"hasAnnexes": true,
"advancePaymentsId": [],
"advanceAmount": 0,
"reimbursableAmount": 2555,
"totalAmount": 2555,
"status": 2,
"expendituresId": [
17669
],
"flyOrdersId": [],
"hotelOrdersId": [],
"autoOrdersId": [],
"costCenterId": 10,
"tagsIds": [],
"permissions": {
"show": true,
"delete": false,
"edit": false,
"sendToApproval": false,
"archive": false
},
"createdAt": "2020-05-22 13:53:49",
"updatedAt": "2020-05-22 13:54:02"
}
}
}]
}
Requisição HTTP
GET https://api.onfly.com.br/expense/expenditure
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startOccurrenceDate | true | não | Filtra por data de quando ocorreu a despesa - início. Date YYYY-MM-DD |
endOccurrenceDate | true | não | Filtra por data de quando ocorreu a despesa - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ["user", "expenditureType", "rdv"] |
Mostra uma despesa apenas
Requisição HTTP
GET https://api.onfly.com.br/expense/expenditure/{expenditure_id}
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
include | - | Não | As inclusões disponíveis são ["user", "expenditureType", "rdv"] |
Criar despesa
Requisição:
{
"date": "2020-01-05",
"expenditureTypeId": 1,
"amount" : 3000,
"description": "Almoço com lead",
"userId": 1
}
curl --location --request POST 'http://api.onfly.com.br/expense/expenditure' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"date": "2020-01-05",
"expenditureTypeId": 1,
"amount" : 3000,
"description": "Almoço com lead",
"userId": 1
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/expense/expenditure",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"date\": \"2020-01-05\",\n\t\"expenditureTypeId\": 1,\n\t\"amount\" : 3000,\n\t\"description\": \"Almoço com lead\",\n\t\"userId\": 1\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"date\": \"2020-01-05\",\n\t\"expenditureTypeId\": 1,\n\t\"amount\" : 3000,\n\t\"description\": \"Almoço com lead\",\n\t\"userId\": 1\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/expense/expenditure", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"date":"2020-01-05","expenditureTypeId":1,"amount":3000,"description":"Almoço com lead","userId":1});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/expense/expenditure", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 24,
"description": "Almoço com lead",
"date": "2020-01-05",
"amount": 3000,
"isReimbursable": true,
"receipts": [],
"rdvId": null,
"userId": 1,
"expenditureTypeId": 1,
"createdAt": "2020-01-20 22:23:36",
"updatedAt": "2020-01-20 22:23:36"
}
}
Requisição HTTP
POST https://api.onfly.com.br/expense/expenditure
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
date | - | Sim | Data que ocorreu a despesa. Formato: yyyy-mm-dd - Min: Antes do momento de criação Alpha-Numérico |
expenditureTypeId | - | Sim | Tipo da despesa que ocorreu. Inteiro |
amount | - | Sim | Quantidade gasta na despesa. Min: 1 Inteiro |
description | - | Sim | Breve descrição da despesa. Min: 3 chars - Max: 2000 chars |
userId | - | Sim | Usuário que realizou a despesa Inteiro |
rdvId | - | Não | Rdv no qual a despesa será adicionada Inteiro |
isReimbursable | true | Não | Se a empresa é reembolsável ou não Boleano |
include | - | Sim | As inclusões disponíveis são ["user", "expenditureType", "rdv"] |
Editar despesa
Só sera possível editar uma despesa caso ela não esteja anexada ao RDV ou que o status de se RDV seja RASCUNHO ou REPROVADO, não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente a data basta enviar apenas o campo date atualizado
Requisição:
{
"amount" : 5099,
"description": "Almoço com lead de Pernambuco"
}
curl --location --request POST 'http://api.onfly.com.br/expense/expenditure' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"amount" : 5099,
"description": "Almoço com lead de Pernambuco",
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/expense/expenditure",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n\t\"amount\" : 5099,\n\t\"description\": \"Almoço com lead de Pernambuco\"}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\n\t\"amount\" : 5099,\n\t\"description\": \"Almoço com lead de Pernambuco\"}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/expense/expenditure", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"amount":5099,"description":"Almoço com lead de Pernambuco"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/expense/expenditure", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 24,
"description": "Almoço com lead de Pernambuco",
"date": "2020-01-05",
"amount": 5099,
"isReimbursable": true,
"receipts": [],
"rdvId": null,
"userId": 1,
"expenditureTypeId": 1,
"createdAt": "2020-01-20 22:23:36",
"updatedAt": "2020-01-20 22:23:36"
}
}
Requisição HTTP
PUT https://api.onfly.com.br/expense/expenditure/{expenditureId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
date | - | Não | Data que ocorreu a despesa. Formato: yyyy-mm-dd - Min: Antes do momento de criação Alpha-Numérico |
expenditureTypeId | - | Não | Tipo da despesa que ocorreu. Inteiro |
amount | - | Não | Quantidade gasta na despesa. Min: 1 Inteiro |
description | - | Não | Breve descrição da despesa. Min: 3 chars - Max: 2000 chars |
userId | - | Não | Usuário que realizou a despesa Inteiro |
rdvId | - | Não | Rdv no qual a despesa será adicionada Inteiro |
isReimbursable | true | Não | Se a empresa é reembolsável ou não Booleano |
include | - | Não | As inclusões disponíveis são ["user", "expenditureType", "rdv"] |
Deletar despesa
Só sera possível deletar uma despesa caso ela não esteja anexada ao RDV ou que o status de se RDV seja RASCUNHO ou REPROVADO.
Requisição HTTP
DELETE https://api.onfly.com.br/expense/expenditure/{expenditureId}
Anexo de comprovantes
Tipos de anexos que aceitam anexos (type)
Para anexar comprovantes em uma despesa por favor veja na documentação Geral/Anexos
Código | Descrição |
---|---|
1 | Comprovantes de despesa. |
Você pode anexar até no maximo 3 arquivos por despesa.
Os seguintes tipos de arquivos são aceitos
- .jpeg
- .png
- .bmp
- .jpg .
- .gif'
Tipos de Despesa
Busca todos os tipos de despesa
Requisição HTTP
GET https://api.onfly.com.br/expense/expenditure-type
Requisição:
{
"name": "Alimentícia",
"icon": "mdi-food-fork-drink"
}
curl --location --request POST 'http://api.onfly.com.br/expense/expenditure-type' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "Alimentícia",
"icon": "mdi-food-fork-drink"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/expense/expenditure-type",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n\t\"name\": \"Alimentícia\",\r\n\t\"icon\": \"mdi-food-fork-drink\"\r\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\r\n\t\"name\": \"Alimentícia\",\r\n\t\"icon\": \"mdi-food-fork-drink\"\r\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/expense/expenditure-type", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"Alimentícia","icon":"mdi-food-fork-drink"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/expense/expenditure-type", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 11,
"name": "Alimentícia",
"icon": "mdi-food-fork-drink",
"createdAt": "2020-01-20 22:34:39",
"updatedAt": "2020-01-20 22:34:39"
}
}
Criar tipo despesa
Requisição HTTP
POST https://api.onfly.com.br/expense/expenditure-type
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Sim | Nome do tipo de despesa. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
icon | mdi-square-inc-cash | Não | Icone grafico para representar o tipo, para mais informações leia nesta documentação Geral/Icone. Alpha-Numérico |
Editar tipo despesa
Não é necessário reenviar todos os campos para sua edição por ex: Caso deseja editar somente o nome basta enviar apenas o campo name atualizado
Requisição:
{
"name": "Alimento"
}
curl --location --request POST 'http://api.onfly.com.br/expense/expenditure-type' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data-raw '{
"name": "Alimento",
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.onfly.com.br/expense/expenditure-type",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n\t\"name\": \"Alimento\"\r\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("http://api.onfly.com.br")
payload = "{\r\n\t\"name\": \"Alimento\"\r\n}"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer token'
}
conn.request("POST", "/expense/expenditure-type", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer token");
let raw = JSON.stringify({"name":"Alimento"});
let requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://api.onfly.com.br/expense/expenditure-type", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 12,
"name": "Alimento",
"icon": "mdi-food-fork-drink",
"createdAt": "2020-01-20 22:36:09",
"updatedAt": "2020-01-20 22:36:09"
}
}
Requisição HTTP
PUT https://api.onfly.com.br/expense/expenditure-type/{expenditureTypeId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
name | - | Não | Nome do tipo de despesa. Min: 2 chars - Max: 190 chars Alpha-Numérico - Unico |
icon | mdi-square-inc-cash | Não | Icone grafico para representar o tipo, para mais informações leia nesta documentação Geral/Icone. Alpha-Numérico |
Deletar tipo despesa
Para deletar o tipo de despesa entre em contato com nosso time de TI.
RDV
Busca todos os RDVs
Esse endpoint busca todos RDvs cadastrados.
Requisição
GET https://api.onfly.com.br/expense/rdv?ownerId=1&include=owner,costCenter,history,tags,permissions&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startDate=2020-05-01&endDate=2020-05-31
curl --location --request GET 'https://api.onfly.com.br/expense/rdv?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,history,tags,permissions&startDate=2020-05-01&endDate=2020-05-31' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/expense/rdv?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,history,tags,permissions&startDate=2020-05-01&endDate=2020-05-31",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/expense/rdv?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,history,tags,permissions&startDate=2020-05-01&endDate=2020-05-31", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/expense/rdv?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,history,tags,permissions&startDate=2020-05-01&endDate=2020-05-31", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 3805,
"name": "Viagem para fort lauderdale",
"protocol": "#20203801",
"motive": "reuniao comercial",
"ownerId": 1,
"hasAnnexes": true,
"advancePaymentsId": [],
"advanceAmount": 0,
"reimbursableAmount": 108090,
"totalAmount": 108090,
"status": 2,
"expendituresId": [
17538,
17544,
17561
],
"flyOrdersId": [],
"hotelOrdersId": [],
"autoOrdersId": [],
"costCenterId": 29,
"tagsIds": [],
"permissions": {
"show": true,
"delete": false,
"edit": false,
"sendToApproval": false,
"archive": false
},
"createdAt": "2020-05-13 12:32:53",
"updatedAt": "2020-05-13 12:33:17",
"owner": {
"data": {
"id": 1123,
"name": "Marcelo Carvalho",
"email": "marcelo@onfly.com.br",
"avatar": "https://app.onfly.com.br/images/avatar/123.png",
"role": "Gerente de Viagens Onfly",
"groupId": 1,
"permission": "Administrador",
"createdAt": "2018-07-27 03:23:35",
"updatedAt": "2020-01-24 12:56:02"
}
},
"costCenter": {
"data": {
"id": 29,
"name": "Comercial",
"createdAt": "2019-02-12 17:42:17",
"updatedAt": "2020-04-02 17:53:34"
}
},
"tags": {
"data": []
}
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 10,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
HTTP Request
GET https://api.onfly.com.br/expense/rdv
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startDate | true | não | Filtra por data de quando o rdv foi cadastrado - início. Date YYYY-MM-DD |
endDate | true | não | Filtra por data de quando o rdv foi cadastrado - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ['owner','advancePayments', 'expenditures', 'costCenter', 'tags', 'flyOrders', 'hotelOrders', 'autoOrders', history'] |
Mostra um rdv apenas
HTTP Request
GET https://api.onfly.com.br/expense/rdv/{rdvId}
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
include | - | Não | As inclusões disponíveis são ['owner','advancePayments', 'expenditures', 'costCenter', 'tags', 'flyOrders', 'hotelOrders', 'autoOrders', history'] |
Mostra um rdv apenas
HTTP Request
GET https://api.onfly.com.br/expense/rdv/{rdvId}
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
include | - | Não | As inclusões disponíveis são ['owner','advancePayments', 'expenditures', 'costCenter', 'tags', 'flyOrders', 'hotelOrders', 'autoOrders', history'] |
Enviar um RDV para aprovação
HTTP Request
POST https://api.onfly.com.br/expense/rdv/send-to-approval/{advancePaymentId}
Arquivar um RDV
Apenas é possível arquivar RDVs com status: PENDENTE DE APROVAÇÃO ou PENDENTE DE PAGAMENTO
HTTP Request
POST https://api.onfly.com.br/expense/rdv/archive/{advancePaymentId}
Deletar um RDV
HTTP Request
DELETE https://api.onfly.com.br/expense/rdv/{advancePaymentId}
Criar um RDV
HTTP Request
Requisição
POST https://api.onfly.com.br/expense/rdv
{
"title" : "Viagem para china",
"reason": "compra de insumos",
"userId": 1,
"costCenterId" : 1
}
curl --location --request POST 'https://api.onfly.com.br/expense/rdv' \
--header 'Authorization: Bearer token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'title=Viagem para china' \
--data-urlencode 'reason=compra de insumos' \
--data-urlencode 'userId=1' \
--data-urlencode 'costCenterId=1'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/expense/rdv",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "title=Viagem%20para%20china&reason=compra%20de%20insumos&userId=1&costCenterId=1",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token",
"Content-Type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
url = "https://api.onfly.com.br/expense/rdv"
payload = 'title=Viagem%20para%20china&reason=compra%20de%20insumos&userId=1&costCenterId=1'
headers = {
'Authorization': 'Bearer token',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("title", "Viagem para china");
urlencoded.append("reason", "compra de insumos");
urlencoded.append("userId", "1");
urlencoded.append("costCenterId", "1");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/expense/rdv", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": {
"id": 3860,
"name": "Viagem para china",
"protocol": "#20203860",
"motive": "compra de insumos",
"ownerId": 1,
"hasAnnexes": false,
"advancePaymentsId": [],
"advanceAmount": 0,
"reimbursableAmount": 0,
"totalAmount": 0,
"status": 1,
"expendituresId": [],
"flyOrdersId": [],
"hotelOrdersId": [],
"autoOrdersId": [],
"costCenterId": 1,
"tagsIds": [],
"createdAt": "2020-05-27 11:38:24",
"updatedAt": "2020-05-27 11:38:24"
}
}
POST https://api.onfly.com.br/expense/rdv
Parâmetros
Parâmetro | Obrigatório | Descrição |
---|---|---|
title | sim | título do RDV string |
reason | sim | motivo do reembolso do RDV string |
annexes | não | ID dos anexos array |
userId | sim | id do usuário inteiro |
tagsId | não | lista de ids de tags array |
costCenterId | sim | centro de custo inteiro |
Adiantamento de Viagens
É possível listar adiantamentos, atualizar ou até mesmo criar adiantamentos.
Adiantamentos são poderosos quando uma empresa precisa adiantar valores aos colaboradores em viagens.
Busca todos os Adiantamentos de viagens
Esse endpoint busca todos os Adiantamentos
Requisição
GET https://api.onfly.com.br/expense/advance-payment?ownerId=1&include=owner,costCenter,tags,permissions&page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&startDate=2020-05-01&endDate=2020-05-31
curl --location --request GET 'https://api.onfly.com.br/expense/advance-payment?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,tags,permissions&startDate=2020-05-01&endDate=2020-05-31' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/expense/advance-payment?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,tags,permissions&startDate=2020-05-01&endDate=2020-05-31",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/expense/advance-payment?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,tags,permissions&startDate=2020-05-01&endDate=2020-05-31", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/expense/advance-payment?page=1&perPage=10&sortOrder=desc&sortBy=id&seeAll=false&ownerId=1&include=owner,costCenter,tags,permissions&startDate=2020-05-01&endDate=2020-05-31", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 56,
"protocol": "#000056",
"name": "Adiantamento referente ao RDV 512",
"reason": null,
"userId": 596,
"amount": 12000,
"rdvId": 512,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
},
{
"id": 60,
"protocol": "#000060",
"name": "Adiantamento referente ao RDV 527",
"reason": null,
"userId": 596,
"amount": 20000,
"rdvId": 527,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
},
{
"id": 102,
"protocol": "#000102",
"name": "Adiantamento referente ao RDV 880",
"reason": null,
"userId": 596,
"amount": 20000,
"rdvId": 880,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
},
{
"id": 22,
"protocol": "#000022",
"name": "Adiantamento referente ao RDV 128",
"reason": null,
"userId": 1,
"amount": 30000,
"rdvId": 128,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
},
{
"id": 43,
"protocol": "#000043",
"name": "Adiantamento referente ao RDV 361",
"reason": null,
"userId": 1,
"amount": 40000,
"rdvId": 361,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
},
{
"id": 109,
"protocol": "#000109",
"name": "Adiantamento para viagem para SP (VtexDay Brasil)",
"reason": "Precisarei de adiantamento de viagem, para comprar material para o stand",
"userId": 1,
"amount": 50000,
"rdvId": null,
"type": 1,
"status": 5,
"createdAt": "2019-10-01 08:57:06",
"updatedAt": "2019-10-01 09:18:02"
},
{
"id": 141,
"protocol": "#000141",
"name": "adiantamento para viagem para brasília",
"reason": "preciso do adiantamento",
"userId": 1,
"amount": 40000,
"rdvId": null,
"type": 1,
"status": 2,
"createdAt": "2019-11-21 15:09:48",
"updatedAt": "2019-11-21 15:09:57"
},
{
"id": 145,
"protocol": "#000145",
"name": "Viagem para Alemanha",
"reason": "viagem parar ajekjkdjfakj",
"userId": 1,
"amount": 100000,
"rdvId": null,
"type": 1,
"status": 2,
"createdAt": "2019-11-28 14:30:41",
"updatedAt": "2019-11-28 14:30:59"
},
{
"id": 225,
"protocol": "#000225",
"name": "Viajem pra sp",
"reason": "Fechad negocio",
"userId": 1,
"amount": 9000,
"rdvId": null,
"type": 1,
"status": 4,
"createdAt": "2020-05-12 23:50:26",
"updatedAt": "2020-05-12 23:51:08"
},
{
"id": 29,
"protocol": "#000029",
"name": "Adiantamento referente ao RDV 245",
"reason": null,
"userId": 13,
"amount": 50000,
"rdvId": 245,
"type": 1,
"status": 5,
"createdAt": "2019-09-30 16:35:17",
"updatedAt": "2020-05-26 16:53:22"
}
],
"meta": {
"pagination": {
"total": 87,
"count": 10,
"per_page": 10,
"current_page": 1,
"total_pages": 9,
"links": {
"next": "https://api.onfly.com.br/expense/advance-payment?page=2"
}
}
}
}
HTTP Request
GET https://api.onfly.com.br/expense/advance-payment
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startDate | true | não | Filtra por data de quando o adiantamento foi cadastrado - início. Date YYYY-MM-DD |
endDate | true | não | Filtra por data de quando o adiantamento foi cadastrado - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ['user', 'rdv', 'history'] |
Mostra um Adiantamento apenas
HTTP Request
GET https://api.onfly.com.br/expense/advance-payment/{advancePaymentId}
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
include | - | Não | As inclusões disponíveis são ['user', 'rdv', 'history'] |
Enviar um adiantamento para aprovação
HTTP Request
POST https://api.onfly.com.br/expense/advance-payment/send-to-approval/{advancePaymentId}
Travel
Através da nossa API de travel, você poderá buscar todas as solicitações de reservas realizadas, seja via aéreo, hotel ou carro.
Exemplos de chamadas para recuperar dados
GET https://api.onfly.com.br/travel/consumer/fly-traveller
GET https://api.onfly.com.br/travel/consumer/hotel-guest
GET https://api.onfly.com.br/travel/consumer/auto-driver
Busca viagens de aéreo
Esse endpoint busca todas as viagens de aéreo
Requisição
GET https://api.onfly.com.br/travel/consumer/fly-traveller?include=flyOrder
curl --location --request GET 'https://api.onfly.com.br/travel/consumer/fly-traveller?include=flyOrder' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/travel/consumer/fly-traveller?include=flyOrder",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/travel/consumer/fly-traveller?include=flyOrder", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/travel/consumer/fly-traveller?include=flyOrder", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 137,
"name": "Stephano Souza",
"firstName": "Stephano",
"lastName": "Souza",
"amount": 32690,
"userId": 18,
"flyOrderId": 195,
"createdAt": "2019-01-28 20:55:03",
"updatedAt": "2019-01-28 20:55:36",
"flyOrder": {
"data": {
"id": 195,
"protocol": "#000195",
"type": 1,
"status": 3,
"isRoundTrip": true,
"outbound": {
"from": "CGH",
"to": "CNF",
"departureDate": "2019-02-19 11:05:00",
"arrivalDate": "2019-02-19 12:20:00",
"cia": {
"id": "G3",
"name": "VRG Linhas Aereas S.A",
"iata": "G3",
"callSign": "Gol",
"status": 1
}
},
"inbound": {
"from": "CNF",
"to": "CGH",
"departureDate": "2019-02-21 19:30:00",
"arrivalDate": "2019-02-21 20:50:00",
"cia": {
"id": "G3",
"name": "VRG Linhas Aereas S.A",
"iata": "G3",
"callSign": "Gol",
"status": 1
}
},
"createdAt": "2019-01-28 20:55:03",
"updatedAt": "2019-01-28 20:55:36"
}
}
}
]
}
Requisição HTTP
GET https://api.onfly.com.br/travel/consumer/fly-traveller
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startDate | true | não | Filtra por data de criação - início. Date YYYY-MM-DD |
endDate | true | não | Filtra por data de criação - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ["flyOrder"] |
Busca viagens de hotel
Esse endpoint busca todas as viagens de hotel
Requisição
GET https://api.onfly.com.br/travel/consumer/hotel-guest?include=hotelOrder
curl --location --request GET 'https://api.onfly.com.br/travel/consumer/hotel-guest?include=hotelOrder' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/travel/consumer/hotel-guest?include=hotelOrder",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/travel/consumer/hotel-guest?include=hotelOrder", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/travel/consumer/hotel-guest?include=hotelOrder", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 2624,
"name": "Marcelo Carvalho",
"firstName": "Marcelo",
"lastName": "Carvalho",
"amount": 14809,
"userId": 1,
"hotelOrderId": 2300,
"createdAt": "2020-01-15 20:39:41",
"updatedAt": "2020-01-15 20:39:41",
"hotelOrder": {
"data": {
"id": 2300,
"protocol": "#002300",
"status": 2,
"checkin": "2020-01-16",
"checkout": "2020-01-17",
"hotelName": "Hotel Consulado",
"createdAt": "2020-01-15 20:39:41",
"updatedAt": "2020-01-16 09:53:30"
}
}
}
]
}
Requisição HTTP
GET https://api.onfly.com.br/travel/consumer/hotel-guest
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startDate | true | não | Filtra por data de criação - início. Date YYYY-MM-DD |
endDate | true | não | Filtra por data de criação - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ["hotelOrder"] |
Busca viagens de carro
Esse endpoint busca todas as viagens realizadas de carro
Requisição
GET https://api.onfly.com.br/travel/consumer/auto-driver?include=autoOrder
curl --location --request GET 'https://api.onfly.com.br/travel/consumer/auto-driver?include=autoOrder' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/travel/consumer/auto-driver?include=autoOrder",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/travel/consumer/auto-driver?include=autoOrder", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/travel/consumer/auto-driver?include=autoOrder", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 34,
"name": "Marcelo Carvalho",
"firstName": "Marcelo",
"lastName": "Carvalho",
"amount": 24420,
"userId": 1,
"autoOrderId": 46,
"createdAt": "2019-11-25 14:32:03",
"updatedAt": "2019-11-25 14:32:03",
"autoOrder": {
"data": {
"id": 46,
"protocol": "#000046",
"status": 3,
"withdraw": {
"date": "2019-11-27 07:00:00",
"city": "Rodovia LMG 800 KM 03 - Lagoa Santa"
},
"deposit": {
"date": "2019-11-30 07:00:00",
"city": "Rodovia LMG 800 KM 03 - Lagoa Santa"
},
"group": "A",
"description": "UP, FIAT MOBI SEM AR/DIREÇÃO",
"renter": "Foco",
"createdAt": "2019-11-25 14:32:03",
"updatedAt": "2020-05-12 10:55:50"
}
}
}
]
}
Requisição HTTP
GET https://api.onfly.com.br/travel/consumer/auto-driver
Parâmetros Query
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
startDate | true | não | Filtra por data de criação - início. Date YYYY-MM-DD |
endDate | true | não | Filtra por data de criação - fim. Date YYYY-MM-DD |
paginate | true | não | Define se os resultados da API ira retornar paginado ou não. Booleano |
page | 1 | não | Caso paginado, aqui é definido o ponteiro da pagina que deseja Inteiro |
perPage | 10 | não | Caso paginado, mostra o número de registros por página Inteiro |
sortOrder | desc | não | Ordenação String |
sortBy | id | não | Campo para trazer ordenado String |
include | - | não | As inclusões disponíveis são ["autoOrder"] |
Budgets
Com a nossa API de budget, você consegue controlar melhor o orçamento de viagens, por centro de custos e colaborador da empresa.
Recuperar Budget
Requisição
GET https://api.onfly.com.br/settings/budget
curl --location --request GET 'https://api.onfly.com.br/settings/budget' \
--header 'Authorization: Bearer token'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.onfly.com.br/settings/budget",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer token"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api.onfly.com.br")
payload = ''
headers = {
'Authorization': 'Bearer token'
}
conn.request("GET", "/travel/consumer/fly-traveller?include=flyOrder", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer token");
var urlencoded = new URLSearchParams();
var requestOptions = {
method: 'GET',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://api.onfly.com.br/settings/budget", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
Resposta:
{
"data": [
{
"id": 1,
"yearUnderBudget": 2020,
"details": {
"1": {
"costCenterId": 1,
"allowOverbuying": false,
"overBudget": true,
"overBudgetAmount": 413159,
"underBudgetAmount": 1050000
},
"29": {
"costCenterId": 29,
"allowOverbuying": false,
"overBudget": false,
"overBudgetAmount": 0,
"underBudgetAmount": 32436145
},
"30": {
"costCenterId": 30,
"allowOverbuying": true,
"overBudget": true,
"overBudgetAmount": 1000,
"underBudgetAmount": 600000
},
"2646": {
"costCenterId": 2646,
"allowOverbuying": false,
"overBudget": false,
"overBudgetAmount": 0,
"underBudgetAmount": 19800000
},
"4050": {
"costCenterId": 4050,
"allowOverbuying": true,
"overBudget": false,
"overBudgetAmount": 0,
"underBudgetAmount": 3615001
},
"4108": {
"costCenterId": 4108,
"allowOverbuying": false,
"overBudget": true,
"overBudgetAmount": 1000,
"underBudgetAmount": 1500000
}
},
"createdAt": "2020-02-13 14:06:46",
"updatedAt": "2020-05-20 11:49:18"
}
]
}
Requisição HTTP
GET https://api.onfly.com.br/settings/budget
Geral
Icones
Busca todos os icones que podem ser utilizados
HTTP Request
GET https://api.onfly.com.br/general/icon
Retorna HTML do icone
HTTP Request
GET https://api.onfly.com.br/general/icon/image/{iconCode}
Anexos
Anexar Arquivo
Envia um arquivo para nosso sistema, esse é a unica requisição em nosso sistema que o tipo é form-data por se tratar de ser upload de arquivo, os tipos aceitos dependem de da entidade no qual o arquivo vai ser anexada para saber mais sobre os tipos de arquivos que aceitam anexos basta ir nesta documentação para Geral/Codigos
Requisição HTTP
PUT https://api.onfly.com.br/general/attachment/{entityType}/{type}/{entityId}
Corpo da Requisição
Parâmetro | Padrão | Obrigatório | Descrição |
---|---|---|---|
file | - | Sim | Data que ocorreu a despesa. Formatos: yyyy-mm-dd - Max: 4 Mb Alpha-Numérico |
Códigos
Permissões de usuários (permissions)
Código | Descrição |
---|---|
manager | Administrador do sistema, possui todas as permissões. |
travel_manager | Administrador de viagens, possui as mesmas permissões que employees porem pode comprar para outros colaboradores |
employee | Colaborador basico, possui a capacidade de gerar despesas e reservar passagens apenas para ele mesmo |
Tipos de entidades que aceitam anexos (entityType)
Código | Descrição |
---|---|
4 | Despesas. |
Tipos de documentos aceitos na plataforma (type)
Código | Descrição |
---|---|
1 | CPF. |
2 | Passaporte. |