Pipelines
Um pipeline representa um funil de vendas com uma sequência ordenada de estágios (stages). Cada negócio (deal) pertence a um pipeline e ocupa exatamente um de seus estágios. Esta página cobre o CRUD completo de pipelines e o gerenciamento dos estágios de cada pipeline.
- IDs de pipeline usam o prefixo
pipe_; IDs de estágio usam o prefixostg_. - A empresa (tenant) é resolvida automaticamente a partir do token. Consulte Autenticação.
- O formato do envelope, os filtros de listagem e os códigos de erro seguem as convenções gerais e a página de Erros.
O objeto Pipeline
Seção intitulada “O objeto Pipeline”| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do pipeline (pipe_). |
name | string | Nome do pipeline. |
description | string | null | Descrição opcional. |
is_default | boolean | Indica se é o pipeline padrão da empresa. |
stages_count | integer | Quantidade de estágios. |
deals_count | integer | Quantidade de negócios no pipeline. |
stages | array | Estágios do pipeline (incluídos em GET /{id}). |
created_at | string | Data de criação em ISO-8601. |
updated_at | string | Data da última atualização em ISO-8601. |
O objeto Estágio (Stage)
Seção intitulada “O objeto Estágio (Stage)”| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do estágio (stg_). |
pipeline_id | string | Pipeline ao qual o estágio pertence. |
name | string | Nome do estágio. |
position | integer | Posição ordinal do estágio no pipeline (a partir de 1). |
probability | integer | Probabilidade de ganho associada ao estágio, de 0 a 100. |
is_won | boolean | Indica se o estágio representa um negócio ganho. |
is_lost | boolean | Indica se o estágio representa um negócio perdido. |
deals_count | integer | Quantidade de negócios no estágio. |
created_at | string | Data de criação em ISO-8601. |
updated_at | string | Data da última atualização em ISO-8601. |
Listar pipelines
Seção intitulada “Listar pipelines”Listar pipelines
Retorna a coleção paginada de pipelines da empresa.
Parâmetros de query
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | integer | — | Página atual (padrão: 1). |
per_page | integer | — | Itens por página (padrão: 20, máx: 100). |
search | string | — | Busca textual por nome do pipeline. |
sort | string | — | Campo de ordenação (ex.: name, created_at). |
direction | string | — | Direção da ordenação: asc ou desc. |
is_default | boolean | — | Filtra apenas o pipeline padrão. |
curl -X GET https://api.maestron.com.br/v1/crm/pipelines \
-H "Authorization: Bearer SEU_TOKEN" <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/v1/crm/pipelines', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.get(
"https://api.maestron.com.br/v1/crm/pipelines",
headers=headers,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines", {
method: "GET",
headers: {
"Authorization": "Bearer SEU_TOKEN",
},
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var response = await client.GetAsync("https://api.maestron.com.br/v1/crm/pipelines");
var data = await response.Content.ReadAsStringAsync(); GET /crm/pipelines HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN Respostas
{
"message": "Pipelines listados.",
"data": [
{
"id": "pipe_01J9Z3K8",
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages_count": 4,
"deals_count": 27,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-06-18T14:30:00Z"
},
{
"id": "pipe_01J9Z3M2",
"name": "Pós-venda",
"description": null,
"is_default": false,
"stages_count": 3,
"deals_count": 8,
"created_at": "2026-03-22T11:15:00Z",
"updated_at": "2026-05-02T08:45:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 2,
"last_page": 1
}
} {
"message": "Não autenticado."
} Obter um pipeline
Seção intitulada “Obter um pipeline”Retorna um único pipeline com a lista completa de seus estágios ordenados por position.
Obter pipeline
Retorna um pipeline pelo ID, incluindo seus estágios.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
curl -X GET https://api.maestron.com.br/v1/crm/pipelines/{id} \
-H "Authorization: Bearer SEU_TOKEN" <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/v1/crm/pipelines/{id}', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.get(
"https://api.maestron.com.br/v1/crm/pipelines/{id}",
headers=headers,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}", {
method: "GET",
headers: {
"Authorization": "Bearer SEU_TOKEN",
},
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var response = await client.GetAsync("https://api.maestron.com.br/v1/crm/pipelines/{id}");
var data = await response.Content.ReadAsStringAsync(); GET /crm/pipelines/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN Respostas
{
"message": "Pipeline retornado.",
"data": {
"id": "pipe_01J9Z3K8",
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages_count": 4,
"deals_count": 27,
"stages": [
{
"id": "stg_01J9Z40A",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Qualificação",
"position": 1,
"probability": 10,
"is_won": false,
"is_lost": false,
"deals_count": 12,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40B",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Proposta",
"position": 2,
"probability": 40,
"is_won": false,
"is_lost": false,
"deals_count": 9,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40C",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Ganho",
"position": 3,
"probability": 100,
"is_won": true,
"is_lost": false,
"deals_count": 6,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40D",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Perdido",
"position": 4,
"probability": 0,
"is_won": false,
"is_lost": true,
"deals_count": 0,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
}
],
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-06-18T14:30:00Z"
}
} {
"message": "Não autenticado."
} {
"message": "Pipeline não encontrado."
} Criar pipeline
Seção intitulada “Criar pipeline”Cria um pipeline. É possível enviar os estágios iniciais no mesmo corpo. Quando stages não é informado, o pipeline é criado sem estágios.
Criar pipeline
Cria um novo pipeline, opcionalmente com seus estágios iniciais.
Corpo (body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do pipeline. |
description | string | — | Descrição opcional. |
is_default | boolean | — | Define como pipeline padrão da empresa. |
stages | array | — | Estágios iniciais (name, probability, is_won, is_lost). A posição segue a ordem do array. |
curl -X POST https://api.maestron.com.br/v1/crm/pipelines \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages": [
{
"name": "Qualificação",
"probability": 10
},
{
"name": "Proposta",
"probability": 40
},
{
"name": "Ganho",
"probability": 100,
"is_won": true
},
{
"name": "Perdido",
"probability": 0,
"is_lost": true
}
]
}' <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/v1/crm/pipelines', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Funil de Vendas',
'description' => 'Pipeline padrão para novas oportunidades.',
'is_default' => true,
'stages' => [object Object],[object Object],[object Object],[object Object],
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": True,
"stages": [object Object],[object Object],[object Object],[object Object],
}
response = requests.post(
"https://api.maestron.com.br/v1/crm/pipelines",
headers=headers,
json=payload,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines", {
method: "POST",
headers: {
"Authorization": "Bearer SEU_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages": [
{
"name": "Qualificação",
"probability": 10
},
{
"name": "Proposta",
"probability": 40
},
{
"name": "Ganho",
"probability": 100,
"is_won": true
},
{
"name": "Perdido",
"probability": 0,
"is_lost": true
}
]
}),
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var payload = new StringContent(
"{\"name\":\"Funil de Vendas\",\"description\":\"Pipeline padrão para novas oportunidades.\",\"is_default\":true,\"stages\":[{\"name\":\"Qualificação\",\"probability\":10},{\"name\":\"Proposta\",\"probability\":40},{\"name\":\"Ganho\",\"probability\":100,\"is_won\":true},{\"name\":\"Perdido\",\"probability\":0,\"is_lost\":true}]}",
System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://api.maestron.com.br/v1/crm/pipelines", payload);
var data = await response.Content.ReadAsStringAsync(); POST /crm/pipelines HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages": [
{
"name": "Qualificação",
"probability": 10
},
{
"name": "Proposta",
"probability": 40
},
{
"name": "Ganho",
"probability": 100,
"is_won": true
},
{
"name": "Perdido",
"probability": 0,
"is_lost": true
}
]
} Respostas
{
"message": "Pipeline criado.",
"data": {
"id": "pipe_01J9Z3K8",
"name": "Funil de Vendas",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages_count": 4,
"deals_count": 0,
"stages": [
{
"id": "stg_01J9Z40A",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Qualificação",
"position": 1,
"probability": 10,
"is_won": false,
"is_lost": false,
"deals_count": 0,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z"
},
{
"id": "stg_01J9Z40B",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Proposta",
"position": 2,
"probability": 40,
"is_won": false,
"is_lost": false,
"deals_count": 0,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z"
},
{
"id": "stg_01J9Z40C",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Ganho",
"position": 3,
"probability": 100,
"is_won": true,
"is_lost": false,
"deals_count": 0,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z"
},
{
"id": "stg_01J9Z40D",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Perdido",
"position": 4,
"probability": 0,
"is_won": false,
"is_lost": true,
"deals_count": 0,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z"
}
],
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z"
}
} {
"message": "Não autenticado."
} {
"message": "Os dados informados são inválidos.",
"errors": {
"name": [
"O campo nome é obrigatório."
],
"stages.0.probability": [
"O campo probabilidade deve estar entre 0 e 100."
]
}
} Atualizar pipeline
Seção intitulada “Atualizar pipeline”Atualiza os atributos do próprio pipeline. Os estágios são gerenciados pelos endpoints de estágio descritos abaixo.
Atualizar pipeline
Atualiza nome, descrição ou marca o pipeline como padrão.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
Corpo (body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | — | Nome do pipeline. |
description | string | — | Descrição opcional. |
is_default | boolean | — | Define como pipeline padrão da empresa. |
curl -X PATCH https://api.maestron.com.br/v1/crm/pipelines/{id} \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Funil de Vendas 2026",
"is_default": true
}' <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.maestron.com.br/v1/crm/pipelines/{id}', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Funil de Vendas 2026',
'is_default' => true,
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
"name": "Funil de Vendas 2026",
"is_default": True,
}
response = requests.patch(
"https://api.maestron.com.br/v1/crm/pipelines/{id}",
headers=headers,
json=payload,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}", {
method: "PATCH",
headers: {
"Authorization": "Bearer SEU_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Funil de Vendas 2026",
"is_default": true
}),
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var payload = new StringContent(
"{\"name\":\"Funil de Vendas 2026\",\"is_default\":true}",
System.Text.Encoding.UTF8, "application/json");
var response = await client.SendAsync(new HttpRequestMessage(
new HttpMethod("PATCH"), "https://api.maestron.com.br/v1/crm/pipelines/{id}") { Content = payload });
var data = await response.Content.ReadAsStringAsync(); PATCH /crm/pipelines/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"name": "Funil de Vendas 2026",
"is_default": true
} Respostas
{
"message": "Pipeline atualizado.",
"data": {
"id": "pipe_01J9Z3K8",
"name": "Funil de Vendas 2026",
"description": "Pipeline padrão para novas oportunidades.",
"is_default": true,
"stages_count": 4,
"deals_count": 27,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-06-20T15:00:00Z"
}
} {
"message": "Não autenticado."
} {
"message": "Pipeline não encontrado."
} {
"message": "Os dados informados são inválidos.",
"errors": {
"name": [
"O campo nome deve ter no máximo 255 caracteres."
]
}
} Remover pipeline
Seção intitulada “Remover pipeline”Remove um pipeline. Um pipeline com negócios associados não pode ser removido (409). O pipeline padrão também não pode ser removido enquanto for o padrão.
Remover pipeline
Remove um pipeline sem negócios associados.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
curl -X DELETE https://api.maestron.com.br/v1/crm/pipelines/{id} \
-H "Authorization: Bearer SEU_TOKEN" <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.maestron.com.br/v1/crm/pipelines/{id}', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.delete(
"https://api.maestron.com.br/v1/crm/pipelines/{id}",
headers=headers,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}", {
method: "DELETE",
headers: {
"Authorization": "Bearer SEU_TOKEN",
},
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var response = await client.DeleteAsync("https://api.maestron.com.br/v1/crm/pipelines/{id}");
var data = await response.Content.ReadAsStringAsync(); DELETE /crm/pipelines/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN Respostas
{
"message": "Pipeline removido."
} {
"message": "Não autenticado."
} {
"message": "Pipeline não encontrado."
} {
"message": "Não é possível remover um pipeline com negócios associados."
} Estágios
Seção intitulada “Estágios”Os estágios de um pipeline são gerenciados como sub-recurso sob /crm/pipelines/{id}/stages.
Listar estágios
Seção intitulada “Listar estágios”Listar estágios
Retorna os estágios do pipeline ordenados por position.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
curl -X GET https://api.maestron.com.br/v1/crm/pipelines/{id}/stages \
-H "Authorization: Bearer SEU_TOKEN" <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/v1/crm/pipelines/{id}/stages', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.get(
"https://api.maestron.com.br/v1/crm/pipelines/{id}/stages",
headers=headers,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages", {
method: "GET",
headers: {
"Authorization": "Bearer SEU_TOKEN",
},
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var response = await client.GetAsync("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages");
var data = await response.Content.ReadAsStringAsync(); GET /crm/pipelines/{id}/stages HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN Respostas
{
"message": "Estágios listados.",
"data": [
{
"id": "stg_01J9Z40A",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Qualificação",
"position": 1,
"probability": 10,
"is_won": false,
"is_lost": false,
"deals_count": 12,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40B",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Proposta",
"position": 2,
"probability": 40,
"is_won": false,
"is_lost": false,
"deals_count": 9,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40C",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Ganho",
"position": 3,
"probability": 100,
"is_won": true,
"is_lost": false,
"deals_count": 6,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
},
{
"id": "stg_01J9Z40D",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Perdido",
"position": 4,
"probability": 0,
"is_won": false,
"is_lost": true,
"deals_count": 0,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-01-10T09:00:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 4,
"last_page": 1
}
} {
"message": "Não autenticado."
} {
"message": "Pipeline não encontrado."
} Criar estágio
Seção intitulada “Criar estágio”Criar estágio
Adiciona um estágio ao pipeline.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
Corpo (body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do estágio. |
position | integer | — | Posição do estágio. Quando omitido, o estágio é adicionado ao final. |
probability | integer | — | Probabilidade de ganho, de 0 a 100. |
is_won | boolean | — | Marca o estágio como ganho. |
is_lost | boolean | — | Marca o estágio como perdido. |
curl -X POST https://api.maestron.com.br/v1/crm/pipelines/{id}/stages \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Negociação",
"position": 3,
"probability": 70
}' <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/v1/crm/pipelines/{id}/stages', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Negociação',
'position' => 3,
'probability' => 70,
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
"name": "Negociação",
"position": 3,
"probability": 70,
}
response = requests.post(
"https://api.maestron.com.br/v1/crm/pipelines/{id}/stages",
headers=headers,
json=payload,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages", {
method: "POST",
headers: {
"Authorization": "Bearer SEU_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Negociação",
"position": 3,
"probability": 70
}),
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var payload = new StringContent(
"{\"name\":\"Negociação\",\"position\":3,\"probability\":70}",
System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages", payload);
var data = await response.Content.ReadAsStringAsync(); POST /crm/pipelines/{id}/stages HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"name": "Negociação",
"position": 3,
"probability": 70
} Respostas
{
"message": "Estágio criado.",
"data": {
"id": "stg_01J9Z40E",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Negociação",
"position": 3,
"probability": 70,
"is_won": false,
"is_lost": false,
"deals_count": 0,
"created_at": "2026-06-20T15:10:00Z",
"updated_at": "2026-06-20T15:10:00Z"
}
} {
"message": "Não autenticado."
} {
"message": "Pipeline não encontrado."
} {
"message": "Os dados informados são inválidos.",
"errors": {
"name": [
"O campo nome é obrigatório."
],
"probability": [
"O campo probabilidade deve estar entre 0 e 100."
]
}
} Atualizar estágio
Seção intitulada “Atualizar estágio”Atualizar estágio
Atualiza um estágio do pipeline. Alterar position reordena os demais estágios.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
stageId | string | Sim | ID do estágio (stg_). |
Corpo (body)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | — | Nome do estágio. |
position | integer | — | Nova posição do estágio. |
probability | integer | — | Probabilidade de ganho, de 0 a 100. |
is_won | boolean | — | Marca o estágio como ganho. |
is_lost | boolean | — | Marca o estágio como perdido. |
curl -X PATCH https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId} \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Negociação avançada",
"probability": 80,
"position": 2
}' <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Negociação avançada',
'probability' => 80,
'position' => 2,
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
"name": "Negociação avançada",
"probability": 80,
"position": 2,
}
response = requests.patch(
"https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}",
headers=headers,
json=payload,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}", {
method: "PATCH",
headers: {
"Authorization": "Bearer SEU_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Negociação avançada",
"probability": 80,
"position": 2
}),
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var payload = new StringContent(
"{\"name\":\"Negociação avançada\",\"probability\":80,\"position\":2}",
System.Text.Encoding.UTF8, "application/json");
var response = await client.SendAsync(new HttpRequestMessage(
new HttpMethod("PATCH"), "https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}") { Content = payload });
var data = await response.Content.ReadAsStringAsync(); PATCH /crm/pipelines/{id}/stages/{stageId} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"name": "Negociação avançada",
"probability": 80,
"position": 2
} Respostas
{
"message": "Estágio atualizado.",
"data": {
"id": "stg_01J9Z40E",
"pipeline_id": "pipe_01J9Z3K8",
"name": "Negociação avançada",
"position": 2,
"probability": 80,
"is_won": false,
"is_lost": false,
"deals_count": 0,
"created_at": "2026-06-20T15:10:00Z",
"updated_at": "2026-06-20T15:20:00Z"
}
} {
"message": "Não autenticado."
} {
"message": "Estágio não encontrado."
} {
"message": "Os dados informados são inválidos.",
"errors": {
"probability": [
"O campo probabilidade deve estar entre 0 e 100."
]
}
} Remover estágio
Seção intitulada “Remover estágio”Um estágio com negócios associados não pode ser removido (409). Mova os negócios para outro estágio antes de remover.
Remover estágio
Remove um estágio sem negócios associados do pipeline.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do pipeline (pipe_). |
stageId | string | Sim | ID do estágio (stg_). |
curl -X DELETE https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId} \
-H "Authorization: Bearer SEU_TOKEN" <?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}', [
'headers' => [
'Authorization' => 'Bearer SEU_TOKEN',
'Accept' => 'application/json',
],
]);
$data = json_decode($response->getBody(), true); import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.delete(
"https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}",
headers=headers,
)
data = response.json() const response = await fetch("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}", {
method: "DELETE",
headers: {
"Authorization": "Bearer SEU_TOKEN",
},
});
const data = await response.json(); using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "SEU_TOKEN");
var response = await client.DeleteAsync("https://api.maestron.com.br/v1/crm/pipelines/{id}/stages/{stageId}");
var data = await response.Content.ReadAsStringAsync(); DELETE /crm/pipelines/{id}/stages/{stageId} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN Respostas
{
"message": "Estágio removido."
} {
"message": "Não autenticado."
} {
"message": "Estágio não encontrado."
} {
"message": "Não é possível remover um estágio com negócios associados."
}