curl --request POST \
--url https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--data '
{
"nome": "Centro",
"poligono": {
"type": "Polygon",
"coordinates": [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
},
"tipo_calculo": "M",
"tipo_fator": "P",
"fator": 1.5
}
'import requests
url = "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area"
payload = {
"nome": "Centro",
"poligono": {
"type": "Polygon",
"coordinates": [[[-46.62, -23.55], [-46.62691, -23.540489], [-46.63809, -23.544122], [-46.63809, -23.555878], [-46.62691, -23.559511], [-46.62, -23.55]]]
},
"tipo_calculo": "M",
"tipo_fator": "P",
"fator": 1.5
}
headers = {
"Authorization": "Basic <encoded-value>",
"api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
nome: 'Centro',
poligono: {
type: 'Polygon',
coordinates: [
[
[-46.62, -23.55],
[-46.62691, -23.540489],
[-46.63809, -23.544122],
[-46.63809, -23.555878],
[-46.62691, -23.559511],
[-46.62, -23.55]
]
]
},
tipo_calculo: 'M',
tipo_fator: 'P',
fator: 1.5
})
};
fetch('https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area",
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([
'nome' => 'Centro',
'poligono' => [
'type' => 'Polygon',
'coordinates' => [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
],
'tipo_calculo' => 'M',
'tipo_fator' => 'P',
'fator' => 1.5
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area"
payload := strings.NewReader("{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area")
.header("Authorization", "Basic <encoded-value>")
.header("api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 12,
"nome": "Centro",
"fator": 1.5,
"tipo_calculo": "M",
"tipo_fator": "P",
"ativo": true,
"cor_preenchimento": "#ff0000",
"poligono": {
"type": "Polygon",
"coordinates": [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
}
}
}Criar dinâmica por área
Cria uma dinâmica por área na bandeira autenticada: a área desenhada pelo poligono e o fator aplicado às entregas que começam (tipo_fator P) ou terminam (tipo_fator R) dentro dela. A dinâmica passa a valer no preço logo após a criação, igual a uma dinâmica criada pelo painel.
O polígono aceita no máximo 200 vértices, sem contar o fechamento do anel. A validação do corpo devolve todos os erros encontrados de uma vez na lista errors, com o nome do campo no início da mensagem (uma posição do polígono pode gerar um erro para lng e outro para lat). A dinâmica na parada e o limite do valor do fator são conferidos depois, só com o corpo válido, e vêm sozinhos; o erro do fator fora do limite vem sem o prefixo do campo, igual ao PATCH /dinamicas/area/{id}. A prioridade da área e a cor da linha são definidas pela plataforma; quando cor_preenchimento é omitida, a área fica vermelha (#ff0000) para acréscimo e azul (#0000ff) para desconto.
O endpoint não é idempotente: reenviar a mesma requisição cria outra dinâmica. Para escalonar o fator por distância, crie a dinâmica e use PUT /dinamicas/area/{id}/faixas.
Requer Api-Key (bandeira) + autenticação HTTP Basic de um gestor ativo da bandeira.
Na resposta, tipo_calculo e tipo_fator vêm como código (M/F, P/R), como no corpo enviado; o GET /dinamicas/area devolve os rótulos por extenso.
curl --request POST \
--url https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--data '
{
"nome": "Centro",
"poligono": {
"type": "Polygon",
"coordinates": [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
},
"tipo_calculo": "M",
"tipo_fator": "P",
"fator": 1.5
}
'import requests
url = "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area"
payload = {
"nome": "Centro",
"poligono": {
"type": "Polygon",
"coordinates": [[[-46.62, -23.55], [-46.62691, -23.540489], [-46.63809, -23.544122], [-46.63809, -23.555878], [-46.62691, -23.559511], [-46.62, -23.55]]]
},
"tipo_calculo": "M",
"tipo_fator": "P",
"fator": 1.5
}
headers = {
"Authorization": "Basic <encoded-value>",
"api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Basic <encoded-value>',
'api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
nome: 'Centro',
poligono: {
type: 'Polygon',
coordinates: [
[
[-46.62, -23.55],
[-46.62691, -23.540489],
[-46.63809, -23.544122],
[-46.63809, -23.555878],
[-46.62691, -23.559511],
[-46.62, -23.55]
]
]
},
tipo_calculo: 'M',
tipo_fator: 'P',
fator: 1.5
})
};
fetch('https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area",
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([
'nome' => 'Centro',
'poligono' => [
'type' => 'Polygon',
'coordinates' => [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
],
'tipo_calculo' => 'M',
'tipo_fator' => 'P',
'fator' => 1.5
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json",
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area"
payload := strings.NewReader("{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area")
.header("Authorization", "Basic <encoded-value>")
.header("api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-vendas.taximachine.com.br/api/v2/integracao/dinamicas/area")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"nome\": \"Centro\",\n \"poligono\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -46.62,\n -23.55\n ],\n [\n -46.62691,\n -23.540489\n ],\n [\n -46.63809,\n -23.544122\n ],\n [\n -46.63809,\n -23.555878\n ],\n [\n -46.62691,\n -23.559511\n ],\n [\n -46.62,\n -23.55\n ]\n ]\n ]\n },\n \"tipo_calculo\": \"M\",\n \"tipo_fator\": \"P\",\n \"fator\": 1.5\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 12,
"nome": "Centro",
"fator": 1.5,
"tipo_calculo": "M",
"tipo_fator": "P",
"ativo": true,
"cor_preenchimento": "#ff0000",
"poligono": {
"type": "Polygon",
"coordinates": [
[
[
-46.62,
-23.55
],
[
-46.62691,
-23.540489
],
[
-46.63809,
-23.544122
],
[
-46.63809,
-23.555878
],
[
-46.62691,
-23.559511
],
[
-46.62,
-23.55
]
]
]
}
}
}Authorizations
Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.
Obrigatório. Sua chave API.
Body
Nome da área, com até 100 caracteres. Aceita letras, números, acentos (Latin-1, como ç, ñ, ã) e a pontuação do teclado, além de “ ” ˆ ˜ (o mesmo conjunto que a tela de Dinâmica mantém). Não aceita < > " ' & \, emoji, quebra de linha nem símbolos fora desse conjunto, como € — – … ’ ™.
100"Centro"
Área da dinâmica em GeoJSON (RFC 7946): um Polygon com um único anel fechado (a primeira posição igual à última), com ao menos 3 vértices distintos e no máximo 200 posições sem contar o fechamento, com cada posição em [longitude, latitude].
Show child attributes
Show child attributes
Forma de cálculo do fator: F — Valor adicional, soma um valor fixo em R$ ao preço da entrega; M — Fator multiplicador, multiplica o preço da entrega pelo fator informado.
F, M "M"
Momento em que o fator é aplicado: P — Partida, aplicado na origem/coleta da entrega; R — Parada, aplicado no destino/parada da entrega. R só é aceito quando o plano da central inclui a dinâmica na parada; sem ela, a resposta é 400 com "Dinâmica na parada (R) não está disponível no plano da central."
P, R "P"
Valor do fator (numérico). O significado depende de tipo_calculo: com M, é o multiplicador aplicado ao preço da entrega (entre 1.1 e 5, com até uma casa decimal); com F, é o valor fixo em R$ somado ao preço da entrega (entre 0.5 e 99.9, com até duas casas decimais). Valores de desconto (multiplicador entre 0.1 e 0.9, ou valor adicional entre -99.9 e -0.5) só são aceitos quando a central tem a dinâmica de desconto liberada.
1.5
Cor de preenchimento da área no painel, no formato #RRGGBB. Opcional.
^#[0-9A-Fa-f]{6}$"#ff0000"
Indica se a dinâmica é criada ativa. Também aceita 1 e 0. Padrão: true.
true
