Pular para o conteúdo

Companies

Uma company é o registro de um cliente da empresa — pode ser uma pessoa física (kind: individual) ou uma organização (kind: organization). É o cadastro central: documento (CPF/CNPJ), endereço e dados de contato. Um contact é sempre uma pessoa dentro de uma company organização.

Escopo: customers.view para leitura, customers.manage para escrita — ver Escopos & Permissões.

CampoTipoObrigatórioDescrição
idstring (UUID)leituraIdentificador da company.
kindstringsimindividual (pessoa física) ou organization (pessoa jurídica).
namestringsimNome da pessoa ou razão social.
legal_namestring | nullnãoNome fantasia ou outra denominação.
documentstring | nullnãoCPF ou CNPJ, só dígitos. Único por empresa. Aceita entrada mascarada — os dígitos são extraídos antes de gravar.
document_typestring | nullleitura*cpf, cnpj ou other. Derivado do tamanho do document quando não informado.
emailstring | nullnão
phonestring | nullnão
owner_user_idstring (UUID) | nullnãoUsuário da empresa responsável por esta company.
notesstring | nullnãoTexto livre. Máx. 20000 caracteres.
metadataobjectnãoObjeto livre.
activebooleannãoPadrão true.
address_street, address_number, address_complement, address_neighborhood, address_city, address_state, address_zipcodestring | nullnãoEndereço. address_state com 2 letras.
cnae_code, cnae_description, registration_status, opened_atstring/date | nullnãoDados de registro (tipicamente de uma organização).
created_atstring (ISO-8601)leitura
updated_atstring (ISO-8601)leitura
GET /crm/companies

Listar companies

Retorna as companies da empresa, paginado, ordenado por nome.

Parâmetros de query

CampoTipoObrigatórioDescrição
kind string — individual ou organization.
document_type string — cpf, cnpj ou other.
active boolean —
search string — Busca livre por nome, razão social, e-mail ou documento (dígitos).
per_page integer — Entre 1 e 100. Padrão 20.
curl -X GET https://api.maestron.com.br/api/v1/crm/companies \
  -H "Authorization: Bearer SEU_TOKEN"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.maestron.com.br/api/v1/crm/companies', [
    '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/companies",
    headers=headers,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/companies", {
  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/companies");
var data = await response.Content.ReadAsStringAsync();
GET /crm/companies HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN

Respostas

{
  "message": "Companies.",
  "data": [
    {
      "id": "a1b2c3d4-1111-4a5b-8c9d-0e1f2a3b4c5d",
      "kind": "organization",
      "name": "ACME Distribuidora LTDA",
      "legal_name": "ACME",
      "document": "12345678000190",
      "document_type": "cnpj",
      "email": "contato@acme.com",
      "phone": null,
      "owner_user_id": null,
      "notes": null,
      "metadata": {},
      "active": true,
      "address_street": null,
      "address_number": null,
      "address_complement": null,
      "address_neighborhood": null,
      "address_city": null,
      "address_state": null,
      "address_zipcode": null,
      "cnae_code": null,
      "cnae_description": null,
      "registration_status": null,
      "opened_at": null,
      "created_at": "2026-02-01T10:00:00Z",
      "updated_at": "2026-02-01T10:00: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/companies/{id}

Obter company

Parâmetros de caminho

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

Respostas

{
  "message": "Company.",
  "data": {
    "id": "a1b2c3d4-1111-4a5b-8c9d-0e1f2a3b4c5d",
    "kind": "organization",
    "name": "ACME Distribuidora LTDA"
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "Recurso não encontrado.",
  "data": null
}
POST /crm/companies

Criar company

idempotency_key é opcional — ver Sandbox & Idempotência.

Corpo (body)

CampoTipoObrigatórioDescrição
kind string Sim individual ou organization.
name string Sim Máx. 200 caracteres.
legal_name string —
document string — CPF/CNPJ, com ou sem máscara. Único por empresa.
email string —
phone string —
owner_user_id string —
active boolean — Padrão true.
idempotency_key string —
curl -X POST https://api.maestron.com.br/api/v1/crm/companies \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "organization",
    "name": "Nova Cliente LTDA",
    "document": "12.345.678/0001-90",
    "email": "contato@novacliente.com"
  }'
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.maestron.com.br/api/v1/crm/companies', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
    'json' => [
        'kind' => 'organization',
        'name' => 'Nova Cliente LTDA',
        'document' => '12.345.678/0001-90',
        'email' => 'contato@novacliente.com',
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
    "kind": "organization",
    "name": "Nova Cliente LTDA",
    "document": "12.345.678/0001-90",
    "email": "contato@novacliente.com",
}
response = requests.post(
    "https://api.maestron.com.br/api/v1/crm/companies",
    headers=headers,
    json=payload,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/companies", {
  method: "POST",
  headers: {
    "Authorization": "Bearer SEU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "kind": "organization",
    "name": "Nova Cliente LTDA",
    "document": "12.345.678/0001-90",
    "email": "contato@novacliente.com"
  }),
});
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(
    "{\"kind\":\"organization\",\"name\":\"Nova Cliente LTDA\",\"document\":\"12.345.678/0001-90\",\"email\":\"contato@novacliente.com\"}",
    System.Text.Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://api.maestron.com.br/api/v1/crm/companies", payload);
var data = await response.Content.ReadAsStringAsync();
POST /crm/companies HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json

{
  "kind": "organization",
  "name": "Nova Cliente LTDA",
  "document": "12.345.678/0001-90",
  "email": "contato@novacliente.com"
}

Respostas

{
  "message": "Company criado.",
  "data": {
    "id": "b2c3d4e5-2222-4a5b-8c9d-0e1f2a3b4c5d",
    "kind": "organization",
    "name": "Nova Cliente LTDA",
    "document": "12345678000190",
    "document_type": "cnpj",
    "active": true,
    "created_at": "2026-06-20T14:30:00Z",
    "updated_at": "2026-06-20T14:30:00Z"
  }
}
{
  "message": "Não autenticado.",
  "data": null
}
{
  "message": "A chave não tem o escopo necessário.",
  "data": null
}
{
  "message": "Os dados informados são inválidos.",
  "data": null,
  "errors": {
    "kind": [
      "O campo tipo não contém um valor válido."
    ],
    "document": [
      "O campo documento já está em uso."
    ]
  }
}
PATCH /crm/companies/{id}

Atualizar company

Parâmetros de caminho

CampoTipoObrigatórioDescrição
id string Sim

Corpo (body)

CampoTipoObrigatórioDescrição
name string —
active boolean —
curl -X PATCH https://api.maestron.com.br/api/v1/crm/companies/{id} \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "active": false
  }'
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.maestron.com.br/api/v1/crm/companies/{id}', [
    'headers' => [
        'Authorization' => 'Bearer SEU_TOKEN',
        'Accept' => 'application/json',
    ],
    'json' => [
        'active' => false,
    ],
]);
$data = json_decode($response->getBody(), true);
import requests
headers = {"Authorization": "Bearer SEU_TOKEN"}
payload = {
    "active": False,
}
response = requests.patch(
    "https://api.maestron.com.br/api/v1/crm/companies/{id}",
    headers=headers,
    json=payload,
)
data = response.json()
const response = await fetch("https://api.maestron.com.br/api/v1/crm/companies/{id}", {
  method: "PATCH",
  headers: {
    "Authorization": "Bearer SEU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "active": false
  }),
});
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(
    "{\"active\":false}",
    System.Text.Encoding.UTF8, "application/json");
var response = await client.SendAsync(new HttpRequestMessage(
    new HttpMethod("PATCH"), "https://api.maestron.com.br/api/v1/crm/companies/{id}") { Content = payload });
var data = await response.Content.ReadAsStringAsync();
PATCH /crm/companies/{id} HTTP/1.1
Host: api.maestron.com.br
Authorization: Bearer SEU_TOKEN
Content-Type: application/json

{
  "active": false
}

Respostas

{
  "message": "Company atualizado.",
  "data": {
    "id": "b2c3d4e5-2222-4a5b-8c9d-0e1f2a3b4c5d",
    "active": false
  }
}
{
  "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/companies/{id}

Remover company

Parâmetros de caminho

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

Respostas

{
  "message": "Company removido.",
  "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
}

Para o detalhamento de cada código de status, consulte Erros.