Pular para o conteúdo
Acessar painel

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 prefixo stg_.
  • 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.
CampoTipoDescrição
idstringIdentificador do pipeline (pipe_).
namestringNome do pipeline.
descriptionstring | nullDescrição opcional.
is_defaultbooleanIndica se é o pipeline padrão da empresa.
stages_countintegerQuantidade de estágios.
deals_countintegerQuantidade de negócios no pipeline.
stagesarrayEstágios do pipeline (incluídos em GET /{id}).
created_atstringData de criação em ISO-8601.
updated_atstringData da última atualização em ISO-8601.
CampoTipoDescrição
idstringIdentificador do estágio (stg_).
pipeline_idstringPipeline ao qual o estágio pertence.
namestringNome do estágio.
positionintegerPosição ordinal do estágio no pipeline (a partir de 1).
probabilityintegerProbabilidade de ganho associada ao estágio, de 0 a 100.
is_wonbooleanIndica se o estágio representa um negócio ganho.
is_lostbooleanIndica se o estágio representa um negócio perdido.
deals_countintegerQuantidade de negócios no estágio.
created_atstringData de criação em ISO-8601.
updated_atstringData da última atualização em ISO-8601.
GET /crm/pipelines

Listar pipelines

Retorna a coleção paginada de pipelines da empresa.

Parâmetros de query

CampoTipoObrigatórioDescriçã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."
}

Retorna um único pipeline com a lista completa de seus estágios ordenados por position.

GET /crm/pipelines/{id}

Obter pipeline

Retorna um pipeline pelo ID, incluindo seus estágios.

Parâmetros de caminho

CampoTipoObrigatórioDescriçã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."
}

Cria um pipeline. É possível enviar os estágios iniciais no mesmo corpo. Quando stages não é informado, o pipeline é criado sem estágios.

POST /crm/pipelines

Criar pipeline

Cria um novo pipeline, opcionalmente com seus estágios iniciais.

Corpo (body)

CampoTipoObrigatórioDescriçã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."
    ]
  }
}

Atualiza os atributos do próprio pipeline. Os estágios são gerenciados pelos endpoints de estágio descritos abaixo.

PATCH /crm/pipelines/{id}

Atualizar pipeline

Atualiza nome, descrição ou marca o pipeline como padrão.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID do pipeline (pipe_).

Corpo (body)

CampoTipoObrigatórioDescriçã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."
    ]
  }
}

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.

DELETE /crm/pipelines/{id}

Remover pipeline

Remove um pipeline sem negócios associados.

Parâmetros de caminho

CampoTipoObrigatórioDescriçã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."
}

Os estágios de um pipeline são gerenciados como sub-recurso sob /crm/pipelines/{id}/stages.

GET /crm/pipelines/{id}/stages

Listar estágios

Retorna os estágios do pipeline ordenados por position.

Parâmetros de caminho

CampoTipoObrigatórioDescriçã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."
}
POST /crm/pipelines/{id}/stages

Criar estágio

Adiciona um estágio ao pipeline.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID do pipeline (pipe_).

Corpo (body)

CampoTipoObrigatórioDescriçã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."
    ]
  }
}
PATCH /crm/pipelines/{id}/stages/{stageId}

Atualizar estágio

Atualiza um estágio do pipeline. Alterar position reordena os demais estágios.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID do pipeline (pipe_).
stageId string Sim ID do estágio (stg_).

Corpo (body)

CampoTipoObrigatórioDescriçã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."
    ]
  }
}

Um estágio com negócios associados não pode ser removido (409). Mova os negócios para outro estágio antes de remover.

DELETE /crm/pipelines/{id}/stages/{stageId}

Remover estágio

Remove um estágio sem negócios associados do pipeline.

Parâmetros de caminho

CampoTipoObrigatórioDescriçã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."
}