Pular para o conteúdo

Atividades

O recurso Atividade registra uma interação ligada a um negócio: ligação, reunião, tarefa, e-mail, nota ou outro tipo do catálogo do pipeline. Toda atividade pertence a exatamente um negócio (lead_id) e não muda de negócio depois de criada. A rota base é /crm/activities. Escopo: crm.view para leitura, crm.leads.edit para todas as operações de escrita.

CampoTipoObrigatórioDescrição
idstring (UUID)leituraIdentificador da atividade.
funnel_idstring (UUID)leituraPipeline do negócio ao qual a atividade pertence.
lead_idstring (UUID)sim (só na criação)Negócio ao qual a atividade pertence. Não editável depois de criada.
activity_type_idstring (UUID)simTipo de atividade, deve pertencer ao catálogo do pipeline do negócio.
type_namestringleituraNome do tipo no momento da criação (ex.: “Ligação”).
type_iconstringleituraÍcone do tipo no momento da criação.
type_colorstring | nullleituraCor do tipo no momento da criação.
subjectstringsimTítulo/assunto da atividade. Máx. 200 caracteres.
bodystring | nullnãoCorpo livre (HTML). Máx. 20000 caracteres.
locationstring | nullnãoLocal. Máx. 200 caracteres.
due_atstring (ISO-8601) | nullnãoData/hora prevista.
duration_minutesinteger | nullnãoDuração estimada, 0 a 65535.
done_atstring (ISO-8601) | nullleituraData/hora de conclusão. null enquanto pendente.
assigned_user_idstring (UUID) | nullnãoUsuário responsável pela atividade.
assigned_namestring | nullleituraNome do responsável no momento da atribuição.
created_by_user_idstring (UUID) | nullleituraSempre null quando a atividade é criada pela API pública.
created_by_namestring | nullleitura"API · <nome da chave>" quando criada pela API pública.
created_atstring (ISO-8601)leituraData de criação.
updated_atstring (ISO-8601)leituraData da última atualização.
GET /crm/activities

Listar atividades

Lista as atividades da empresa, paginado.

Parâmetros de query

CampoTipoObrigatórioDescrição
per_page integer — Itens por página. De 1 a 100, padrão 20.
deal_id string — Filtra pelas atividades de um negócio.
curl -X GET https://api.maestron.com.br/api/v1/crm/activities \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/api/v1/crm/activities', [
    '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/api/v1/crm/activities",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities", {
  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/api/v1/crm/activities");
var data = await response.Content.ReadAsStringAsync();
GET /crm/activities HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Atividades.",
  "data": [
    {
      "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
      "funnel_id": "b7e8c1a2-3d4f-4a5b-8c9d-0e1f2a3b4c5d",
      "lead_id": "f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
      "activity_type_id": "e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
      "type_name": "Ligação",
      "type_icon": "phone",
      "type_color": "#2196f3",
      "subject": "Ligação de follow-up",
      "body": null,
      "location": null,
      "due_at": "2026-09-05T14:00:00Z",
      "duration_minutes": null,
      "done_at": null,
      "assigned_user_id": null,
      "assigned_name": null,
      "created_by_user_id": null,
      "created_by_name": "API · Integração ERP",
      "created_at": "2026-06-20T14:30:00Z",
      "updated_at": "2026-06-20T14:30:00Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 20,
    "total": 1,
    "last_page": 1
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
GET /crm/activities/{id}

Obter atividade

Retorna uma atividade pelo ID.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID da atividade (UUID).
curl -X GET https://api.maestron.com.br/api/v1/crm/activities/{id} \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/api/v1/crm/activities/{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/api/v1/crm/activities/{id}",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities/{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/api/v1/crm/activities/{id}");
var data = await response.Content.ReadAsStringAsync();
GET /crm/activities/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Atividade.",
  "data": {
    "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
    "subject": "Ligação de follow-up"
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
POST /crm/activities

Criar atividade

Cria uma atividade vinculada a um negócio. idempotency_key é opcional — ver Sandbox & Idempotência.

Corpo (body)

CampoTipoObrigatórioDescrição
lead_id string Sim Negócio ao qual a atividade pertence.
activity_type_id string Sim Tipo de atividade, do catálogo do pipeline do negócio.
subject string Sim Título/assunto. Máx. 200 caracteres.
body string — Corpo livre. Máx. 20000 caracteres.
location string — Local.
due_at string — Data/hora prevista (ISO-8601).
duration_minutes integer — Duração estimada em minutos.
assigned_user_id string — Usuário responsável.
done boolean — Quando true sem done_at explícito, marca como concluída agora.
idempotency_key string — Opcional — evita duplicar em retry.
curl -X POST https://api.maestron.com.br/api/v1/crm/activities \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "lead_id": "f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
    "activity_type_id": "e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
    "subject": "Ligação de follow-up",
    "due_at": "2026-09-05T14:00:00Z",
    "idempotency_key": "2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a"
  }'
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/api/v1/crm/activities', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
    'json' => [
        'lead_id' => 'f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c',
        'activity_type_id' => 'e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b',
        'subject' => 'Ligação de follow-up',
        'due_at' => '2026-09-05T14:00:00Z',
        'idempotency_key' => '2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a',
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
    "lead_id": "f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
    "activity_type_id": "e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
    "subject": "Ligação de follow-up",
    "due_at": "2026-09-05T14:00:00Z",
    "idempotency_key": "2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a",
}
response = requests.post(
    "https://api.maestron.com.br/api/v1/crm/activities",
    headers=headers,
    json=payload,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities", {
  method: "POST",
  headers: {
    "Authorization": "Bearer SEU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "lead_id": "f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
    "activity_type_id": "e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
    "subject": "Ligação de follow-up",
    "due_at": "2026-09-05T14:00:00Z",
    "idempotency_key": "2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a"
  }),
});
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(
    "{\"lead_id\":\"f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c\",\"activity_type_id\":\"e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b\",\"subject\":\"Ligação de follow-up\",\"due_at\":\"2026-09-05T14:00:00Z\",\"idempotency_key\":\"2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a\"}",
    System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://api.maestron.com.br/api/v1/crm/activities", payload);
var data = await response.Content.ReadAsStringAsync();
POST /crm/activities HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json

{
  "lead_id": "f1a2b3c4-5d6e-4f7a-8b9c-0d1e2f3a4b5c",
  "activity_type_id": "e5f6a7b8-9c0d-4e1f-2a3b-4c5d6e7f8a9b",
  "subject": "Ligação de follow-up",
  "due_at": "2026-09-05T14:00:00Z",
  "idempotency_key": "2c4d6e8a-1b3c-4d5e-9f0a-7b8c9d0e1f2a"
}

Respostas

{
  "message": "Atividade criada.",
  "data": {
    "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
    "subject": "Ligação de follow-up",
    "done_at": null
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
{
  "message": "Os dados informados são inválidos.",
  "data": null,
  "errors": {
    "subject": [
      "O campo subject é obrigatório."
    ],
    "activity_type_id": [
      "O campo activity_type_id selecionado é inválido."
    ]
  }
}

lead_id não é aceito no PATCH — a atividade não migra de negócio.

PATCH /crm/activities/{id}

Atualizar atividade

Atualização parcial. Sem idempotency_key (PATCH já é naturalmente idempotente).

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID da atividade (UUID).

Corpo (body)

CampoTipoObrigatórioDescrição
subject string — Título/assunto.
due_at string — Data/hora prevista.
assigned_user_id string — Usuário responsável.
curl -X PATCH https://api.maestron.com.br/api/v1/crm/activities/{id} \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Ligação de follow-up (reagendada)",
    "due_at": "2026-09-06T14:00:00Z"
  }'
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.maestron.com.br/api/v1/crm/activities/{id}', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
    'json' => [
        'subject' => 'Ligação de follow-up (reagendada)',
        'due_at' => '2026-09-06T14:00:00Z',
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
    "subject": "Ligação de follow-up (reagendada)",
    "due_at": "2026-09-06T14:00:00Z",
}
response = requests.patch(
    "https://api.maestron.com.br/api/v1/crm/activities/{id}",
    headers=headers,
    json=payload,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities/{id}", {
  method: "PATCH",
  headers: {
    "Authorization": "Bearer SEU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "subject": "Ligação de follow-up (reagendada)",
    "due_at": "2026-09-06T14:00:00Z"
  }),
});
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(
    "{\"subject\":\"Ligação de follow-up (reagendada)\",\"due_at\":\"2026-09-06T14:00:00Z\"}",
    System.Text.Encoding.UTF8, "application/json");
var response = await client.SendAsync(new HttpRequestMessage(
    new HttpMethod("PATCH"), "https://api.maestron.com.br/api/v1/crm/activities/{id}") { Content = payload });
var data = await response.Content.ReadAsStringAsync();
PATCH /crm/activities/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json

{
  "subject": "Ligação de follow-up (reagendada)",
  "due_at": "2026-09-06T14:00:00Z"
}

Respostas

{
  "message": "Atividade atualizada.",
  "data": {
    "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
    "subject": "Ligação de follow-up (reagendada)"
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
{
  "message": "Os dados informados são inválidos.",
  "data": null,
  "errors": {
    "due_at": [
      "O campo due_at deve ser uma data válida."
    ]
  }
}
POST /crm/activities/{id}/complete

Concluir atividade

Define done_at como agora. Sem idempotency_key nesta rota.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID da atividade (UUID).
curl -X POST https://api.maestron.com.br/api/v1/crm/activities/{id}/complete \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/api/v1/crm/activities/{id}/complete', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.post(
    "https://api.maestron.com.br/api/v1/crm/activities/{id}/complete",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities/{id}/complete", {
  method: "POST",
  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.PostAsync("https://api.maestron.com.br/api/v1/crm/activities/{id}/complete", null);
var data = await response.Content.ReadAsStringAsync();
POST /crm/activities/{id}/complete HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Atividade concluída.",
  "data": {
    "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
    "done_at": "2026-09-05T14:45:00Z"
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
POST /crm/activities/{id}/reopen

Reabrir atividade

Define done_at como null. Sem idempotency_key nesta rota.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID da atividade (UUID).
curl -X POST https://api.maestron.com.br/api/v1/crm/activities/{id}/reopen \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/api/v1/crm/activities/{id}/reopen', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
response = requests.post(
    "https://api.maestron.com.br/api/v1/crm/activities/{id}/reopen",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities/{id}/reopen", {
  method: "POST",
  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.PostAsync("https://api.maestron.com.br/api/v1/crm/activities/{id}/reopen", null);
var data = await response.Content.ReadAsStringAsync();
POST /crm/activities/{id}/reopen HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Atividade reaberta.",
  "data": {
    "id": "d4e5f6a7-8b9c-4d0e-1f2a-3b4c5d6e7f8a",
    "done_at": null
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
DELETE /crm/activities/{id}

Remover atividade

Remove (soft delete) uma atividade.

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim ID da atividade (UUID).
curl -X DELETE https://api.maestron.com.br/api/v1/crm/activities/{id} \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.maestron.com.br/api/v1/crm/activities/{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/api/v1/crm/activities/{id}",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/activities/{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/api/v1/crm/activities/{id}");
var data = await response.Content.ReadAsStringAsync();
DELETE /crm/activities/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Atividade removida.",
  "data": null
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}

A descrição completa de cada código de status está em Erros.