curl --request POST \
--url https://api.olie.ai/api/management/project-bulk-step-move \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_ids": [],
"step_id": null,
"unlink_others": true,
"force_funnel_link": false
}
'import requests
url = "https://api.olie.ai/api/management/project-bulk-step-move"
payload = {
"project_ids": [],
"step_id": None,
"unlink_others": True,
"force_funnel_link": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({project_ids: [], step_id: null, unlink_others: true, force_funnel_link: false})
};
fetch('https://api.olie.ai/api/management/project-bulk-step-move', 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.olie.ai/api/management/project-bulk-step-move",
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([
'project_ids' => [
],
'step_id' => null,
'unlink_others' => true,
'force_funnel_link' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.olie.ai/api/management/project-bulk-step-move"
payload := strings.NewReader("{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.olie.ai/api/management/project-bulk-step-move")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.olie.ai/api/management/project-bulk-step-move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}"
response = http.request(request)
puts response.read_body{
"response": true,
"projects": [
{
"id": "9c2f1a44-3b2e-4a0f-9b7a-1c4c5f7e8d90",
"parent_id": null,
"code": "COM-83",
"name": "Implantação Laboratório Hawkins",
"description": null,
"impact": 1,
"budget": 18500,
"frame_id": "019aeaa3-2778-73ec-8f8d-59d06cc59dca",
"created_at": "2026-08-02T13:04:11.000000Z",
"updated_at": "2026-08-19T10:41:02.000000Z"
},
{
"id": "9c2f1a44-77b1-4e52-8d31-2a9f0c6b45ee",
"parent_id": null,
"code": "COM-91",
"name": "Reforma da subestação",
"description": null,
"impact": 1,
"budget": 18500,
"frame_id": "019aeaa3-2778-73ec-8f8d-59d06cc59dca",
"created_at": "2026-08-02T13:04:11.000000Z",
"updated_at": "2026-08-19T10:41:02.000000Z"
}
]
}{
"response": false,
"message": "validation_errors",
"error": "The step id field is required.",
"validation": {
"step_id": [
"The step id field is required."
]
}
}Mover múltiplos projetos de etapa
Aplica a mesma movimentação a vários projetos de uma vez, com as mesmas verificações da movimentação individual. Projetos que já estão na etapa de destino são ignorados sem erro; qualquer outra recusa — restrição, requisito pendente ou bloqueio — interrompe o lote no projeto em que ocorreu, e os projetos seguintes da lista não são processados. As verificações estão descritas em Mover projetos entre etapas.
curl --request POST \
--url https://api.olie.ai/api/management/project-bulk-step-move \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project_ids": [],
"step_id": null,
"unlink_others": true,
"force_funnel_link": false
}
'import requests
url = "https://api.olie.ai/api/management/project-bulk-step-move"
payload = {
"project_ids": [],
"step_id": None,
"unlink_others": True,
"force_funnel_link": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({project_ids: [], step_id: null, unlink_others: true, force_funnel_link: false})
};
fetch('https://api.olie.ai/api/management/project-bulk-step-move', 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.olie.ai/api/management/project-bulk-step-move",
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([
'project_ids' => [
],
'step_id' => null,
'unlink_others' => true,
'force_funnel_link' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.olie.ai/api/management/project-bulk-step-move"
payload := strings.NewReader("{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.olie.ai/api/management/project-bulk-step-move")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.olie.ai/api/management/project-bulk-step-move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project_ids\": [],\n \"step_id\": null,\n \"unlink_others\": true,\n \"force_funnel_link\": false\n}"
response = http.request(request)
puts response.read_body{
"response": true,
"projects": [
{
"id": "9c2f1a44-3b2e-4a0f-9b7a-1c4c5f7e8d90",
"parent_id": null,
"code": "COM-83",
"name": "Implantação Laboratório Hawkins",
"description": null,
"impact": 1,
"budget": 18500,
"frame_id": "019aeaa3-2778-73ec-8f8d-59d06cc59dca",
"created_at": "2026-08-02T13:04:11.000000Z",
"updated_at": "2026-08-19T10:41:02.000000Z"
},
{
"id": "9c2f1a44-77b1-4e52-8d31-2a9f0c6b45ee",
"parent_id": null,
"code": "COM-91",
"name": "Reforma da subestação",
"description": null,
"impact": 1,
"budget": 18500,
"frame_id": "019aeaa3-2778-73ec-8f8d-59d06cc59dca",
"created_at": "2026-08-02T13:04:11.000000Z",
"updated_at": "2026-08-19T10:41:02.000000Z"
}
]
}{
"response": false,
"message": "validation_errors",
"error": "The step id field is required.",
"validation": {
"step_id": [
"The step id field is required."
]
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Projetos a mover. Obrigatório.
ID (UUID) de um projeto.
ID da etapa de destino. Obrigatório.
Quando true, desvincula cada projeto das demais etapas do mesmo funil.
Quando true, vincula ao funil os projetos que ainda não estiverem vinculados.
Was this page helpful?