CRM

Tudo o que se faz no CRM da Atys, pelo seu sistema: do funil configurado ao relatório de conversão (API v1).

API v1. Todos os endpoints desta página ficam em https://api.atys.pro/api/v1/crm/, respondem JSON e têm contrato estável: mudanças incompatíveis só entram numa versão nova.

Como funciona

Tudo o que a equipe faz no CRM da Atys também pode ser feito pela API: montar o funil, criar e mover negócios, registrar notas e tarefas, transferir entre pipelines, agendar mensagens e consultar os relatórios. Cada chamada passa pelas mesmas regras da plataforma: o histórico do negócio registra a ação, as automações disparam e os webhooks são enviados.

A página segue a ordem em que o CRM é usado:

  1. Conhecer o funil — pipelines, etapas e campos e os catálogos com os ids que as outras chamadas pedem.
  2. Configurar o funil — tipos, pipelines, etapas, campos, etiquetas, motivos de perda e gatilhos.
  3. Trabalhar os negócios — criar, listar, editar, mover, ganhar ou perder, arquivar.
  4. Acompanhar — notas, tarefas e histórico.
  5. Operações avançadas — transferir, clonar, associar a outros pipelines, importar em lote, agendar mensagens, documentos e anexos.
  6. Analisar — relatórios e indicadores do funil.

Autenticação e permissões

Use uma chave de API com as permissões de CRM que a integração precisa:

Permissão da chaveLibera
Consultar CRMTodos os GET: pipelines, catálogos, negócios, notas, tarefas, histórico, agendamentos, documentos e relatórios.
Configurar o CRMCriar, editar e excluir pipelines, etapas, tarefas padrão, campos, etiquetas, motivos de perda e gatilhos.
Criar, editar e mover negócios do CRMTudo o que muda negócios e o acompanhamento deles: criar, editar, mover, ganhar/perder, arquivar, transferir, clonar, importar, notas, tarefas, agendamentos e documentos.
Excluir negócios do CRMDELETE de negócio. Separada de propósito: só dê se a integração realmente exclui.

A chave enxerga os mesmos pipelines e negócios que o usuário API enxerga na plataforma, e só faz o que as permissões dele permitem. Para listar negócios de outros responsáveis ou sem responsável, dê ao usuário API as permissões Ver negócios de outro responsável e Ver negócios sem responsável.

Consultar pipelines, etapas e campos

O ponto de partida de toda integração: os ids das etapas e dos campos personalizados vêm daqui. As etapas vêm em ordem; is_won e is_lost marcam as etapas de ganho e de perda. Os custom_fields são os campos que o negócio pode ter nesse pipeline (o "Valor" do negócio é um deles). A chave só vê os pipelines a que o usuário API tem acesso.

GET https://api.atys.pro/api/v1/crm/pipelines Listar pipelines com etapas e campos

Exemplos de código — listar pipelines com etapas e campos

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 12,
      "name": "Vendas B2B",
      "description": "Funil comercial",
      "stages": [
        {
          "id": 101,
          "name": "Novo",
          "order": 1,
          "color": "#3283c5",
          "is_won": false,
          "is_lost": false
        },
        {
          "id": 102,
          "name": "Proposta",
          "order": 2,
          "color": "#f59e0b",
          "is_won": false,
          "is_lost": false
        },
        {
          "id": 103,
          "name": "Ganho",
          "order": 3,
          "color": "#10b981",
          "is_won": true,
          "is_lost": false
        },
        {
          "id": 104,
          "name": "Perdido",
          "order": 4,
          "color": "#ef4444",
          "is_won": false,
          "is_lost": true
        }
      ],
      "custom_fields": [
        {
          "id": 55,
          "name": "Valor",
          "type": "number",
          "options": null,
          "mandatory": false
        }
      ]
    }
  ]
}

Etiquetas, usuários, origens e prioridades

Os ids que criar e editar negócio pedem. As etiquetas são as que o usuário API pode usar na tela; uma etiqueta fora dessa lista é recusada com invalid_tag. Os usuários são os ativos da empresa (para owner_ids e assignee_id).

GET https://api.atys.pro/api/v1/crm/tags Etiquetas de negócio (tag_ids)

Exemplos de código — etiquetas de negócio (tag_ids)

cURL
curl "https://api.atys.pro/api/v1/crm/tags" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 9,
      "name": "VIP",
      "description": null,
      "color": "#f59e0b"
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/users Usuários da empresa (owner_ids, assignee_id)

Exemplos de código — usuários da empresa (owner_ids, assignee_id)

cURL
curl "https://api.atys.pro/api/v1/crm/users" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 77,
      "name": "Carlos Vendedor",
      "email": "carlos@empresa.com"
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/sources Origens do negócio (source_id)

Exemplos de código — origens do negócio (source_id)

cURL
curl "https://api.atys.pro/api/v1/crm/sources" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 1,
      "name": "Manual",
      "description": null
    },
    {
      "id": 3,
      "name": "Site",
      "description": null
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/priorities Prioridades (priority_id)

Exemplos de código — prioridades (priority_id)

cURL
curl "https://api.atys.pro/api/v1/crm/priorities" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 1,
      "name": "Baixa",
      "description": null
    },
    {
      "id": 2,
      "name": "Média",
      "description": null
    },
    {
      "id": 3,
      "name": "Alta",
      "description": null
    }
  ]
}

Motivos de perda

Use o id em perder ou ao mover para uma etapa de perda.

GET https://api.atys.pro/api/v1/crm/lost-reasons Listar motivos de perda

Exemplos de código — listar motivos de perda

cURL
curl "https://api.atys.pro/api/v1/crm/lost-reasons" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 4,
      "name": "Preço",
      "description": null
    },
    {
      "id": 5,
      "name": "Concorrente",
      "description": null
    }
  ]
}
Configurar o funil. As chamadas desta parte exigem a permissão de chave Configurar o CRM (as leituras, Consultar CRM) e, no usuário API, as mesmas permissões da tela de configuração: tipos de pipeline, criar/editar/arquivar/excluir pipelines, Configurar pipelines (etapas, tarefas padrão, campos, equipe), etiquetas de negócio, motivos de perda e gatilhos. Registro de outra empresa, ou de pipeline que o usuário API não configura, responde 404.

Tipos de pipeline

Todo pipeline pertence a um tipo da empresa (Vendas, Pós-venda, Suporte…). O tipo nasce de um modelo (base_type_id, veja a lista em GET /pipeline-base-types): ao criar um pipeline, as etapas padrão vêm do modelo. O modelo 1 — Funil de Vendas ainda cria as etapas obrigatórias Lead novo, Ganho e Perdido e os campos obrigatórios Valor do Negócio e Data de conversão para cliente. Sem base_type_id, o tipo é 18 — Customizado. O nome não pode se repetir na empresa, e um tipo com pipelines não é excluído.

CampoTipoObrigatórioDescrição
namestring (100)SimNome do tipo, único na empresa.
descriptionstring (200)NãoDescrição curta.
groupstring (100)NãoAgrupamento na tela; default o grupo do modelo. Só na criação.
base_type_idintegerNãoModelo de origem; default 18 (Customizado). Só na criação.
GET https://api.atys.pro/api/v1/crm/pipeline-types Listar tipos de pipeline

Exemplos de código — listar tipos de pipeline

cURL
curl "https://api.atys.pro/api/v1/crm/pipeline-types" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 3,
      "name": "Vendas",
      "description": "Funil comercial",
      "group": "Comercial e Cliente",
      "order": 1,
      "base_type": {
        "id": 1,
        "name": "Funil de Vendas"
      }
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/pipeline-base-types Modelos de tipo de pipeline

Exemplos de código — modelos de tipo de pipeline

cURL
curl "https://api.atys.pro/api/v1/crm/pipeline-base-types" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 1,
      "name": "Funil de Vendas",
      "group": "Comercial e Cliente",
      "description": null
    },
    {
      "id": 18,
      "name": "Customizado",
      "group": "Customizado",
      "description": null
    }
  ]
}
POST https://api.atys.pro/api/v1/crm/pipeline-types Criar tipo de pipeline

Exemplos de código — criar tipo de pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipeline-types" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendas",
    "description": "Funil comercial",
    "base_type_id": 1
  }'
201 Created
{
  "data": {
    "id": 3,
    "name": "Vendas",
    "description": "Funil comercial",
    "group": "Comercial e Cliente",
    "order": 1,
    "base_type": {
      "id": 1,
      "name": "Funil de Vendas"
    }
  }
}
PATCH https://api.atys.pro/api/v1/crm/pipeline-types/{id} Editar tipo de pipeline

Exemplos de código — editar tipo de pipeline

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/pipeline-types/3" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendas B2B"
  }'
200 OK
{
  "data": {
    "id": 3,
    "name": "Vendas B2B",
    "description": "Funil comercial",
    "group": "Comercial e Cliente",
    "order": 1,
    "base_type": {
      "id": 1,
      "name": "Funil de Vendas"
    }
  }
}

Reordenar recebe todos os tipos da empresa, na ordem nova; faltou ou sobrou um id, invalid_order.

POST https://api.atys.pro/api/v1/crm/pipeline-types/reorder Reordenar tipos de pipeline

Exemplos de código — reordenar tipos de pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipeline-types/reorder" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [5, 3]
  }'
200 OK
{
  "data": [
    {
      "id": 5,
      "name": "Pós-venda",
      "description": "Funil comercial",
      "group": "Comercial e Cliente",
      "order": 1,
      "base_type": {
        "id": 1,
        "name": "Funil de Vendas"
      }
    },
    {
      "id": 3,
      "name": "Vendas",
      "description": "Funil comercial",
      "group": "Comercial e Cliente",
      "order": 2,
      "base_type": {
        "id": 1,
        "name": "Funil de Vendas"
      }
    }
  ]
}
DELETE https://api.atys.pro/api/v1/crm/pipeline-types/{id} Excluir tipo de pipeline

Exemplos de código — excluir tipo de pipeline

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/pipeline-types/5" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Criar e editar pipelines

Ao criar, o usuário API e os administradores da empresa entram na equipe do pipeline, e as etapas padrão do tipo são criadas (create_default_stages: false cria só as obrigatórias do funil de vendas). Duplicar copia etapas, campos, tarefas padrão, obrigatórios por etapa, equipe e etiquetas — sem os negócios. Arquivar tira o pipeline da lista GET /pipelines e do kanban; só um pipeline arquivado pode ser excluído (pipeline_not_archived).

CampoTipoObrigatórioDescrição
namestring (100)SimNome do pipeline.
type_idintegerSimTipo de pipeline da empresa (tipos).
descriptionstring (200)NãoDescrição curta.
create_default_stagesbooleanNãoDefault true. Só na criação.
GET https://api.atys.pro/api/v1/crm/pipelines/{id} Ver pipeline (inclusive arquivado)

Exemplos de código — ver pipeline (inclusive arquivado)

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines/12" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "description": "Funil comercial",
    "stages": [
      {
        "id": 101,
        "pipeline_id": 12,
        "name": "Lead novo",
        "description": "Lead novo",
        "color": "#1976d2",
        "order": 1,
        "max_days_in_stage": null,
        "is_won": false,
        "is_lost": false,
        "is_protected": true
      },
      {
        "id": 102,
        "pipeline_id": 12,
        "name": "Ganho",
        "description": "Ganho",
        "color": "#4caf50",
        "order": 2,
        "max_days_in_stage": null,
        "is_won": true,
        "is_lost": false,
        "is_protected": true
      },
      {
        "id": 103,
        "pipeline_id": 12,
        "name": "Perdido",
        "description": "Perdido",
        "color": "#f44336",
        "order": 3,
        "max_days_in_stage": null,
        "is_won": false,
        "is_lost": true,
        "is_protected": true
      }
    ],
    "custom_fields": [
      {
        "id": 55,
        "pipeline_id": 12,
        "name": "Valor do Negócio",
        "type": "price",
        "description": "Valor do Negócio",
        "options": null,
        "order": 1,
        "mandatory": true
      },
      {
        "id": 56,
        "pipeline_id": 12,
        "name": "Data de conversão para cliente",
        "type": "date",
        "description": "Data em que o lead foi convertido em cliente.",
        "options": null,
        "order": 2,
        "mandatory": true
      }
    ],
    "type_id": 3,
    "archived": false
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines Criar pipeline

Exemplos de código — criar pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendas B2B",
    "description": "Funil comercial",
    "type_id": 3,
    "create_default_stages": false
  }'
201 Created
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "description": "Funil comercial",
    "stages": [
      {
        "id": 101,
        "pipeline_id": 12,
        "name": "Lead novo",
        "description": "Lead novo",
        "color": "#1976d2",
        "order": 1,
        "max_days_in_stage": null,
        "is_won": false,
        "is_lost": false,
        "is_protected": true
      },
      {
        "id": 102,
        "pipeline_id": 12,
        "name": "Ganho",
        "description": "Ganho",
        "color": "#4caf50",
        "order": 2,
        "max_days_in_stage": null,
        "is_won": true,
        "is_lost": false,
        "is_protected": true
      },
      {
        "id": 103,
        "pipeline_id": 12,
        "name": "Perdido",
        "description": "Perdido",
        "color": "#f44336",
        "order": 3,
        "max_days_in_stage": null,
        "is_won": false,
        "is_lost": true,
        "is_protected": true
      }
    ],
    "custom_fields": [
      {
        "id": 55,
        "pipeline_id": 12,
        "name": "Valor do Negócio",
        "type": "price",
        "description": "Valor do Negócio",
        "options": null,
        "order": 1,
        "mandatory": true
      },
      {
        "id": 56,
        "pipeline_id": 12,
        "name": "Data de conversão para cliente",
        "type": "date",
        "description": "Data em que o lead foi convertido em cliente.",
        "options": null,
        "order": 2,
        "mandatory": true
      }
    ],
    "type_id": 3,
    "archived": false
  }
}
PATCH https://api.atys.pro/api/v1/crm/pipelines/{id} Editar pipeline

Exemplos de código — editar pipeline

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/pipelines/12" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendas B2B 2027"
  }'
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B 2027",
    "description": "Funil comercial",
    "type_id": 3,
    "archived": false,
    "stages": "…",
    "custom_fields": "…"
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/duplicate Duplicar pipeline

Exemplos de código — duplicar pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/duplicate" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendas B2B (cópia)"
  }'
201 Created
{
  "data": {
    "id": 13,
    "name": "Vendas B2B (cópia)",
    "description": "Funil comercial",
    "type_id": 3,
    "archived": false,
    "stages": "…",
    "custom_fields": "…"
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/archive Arquivar pipeline

Exemplos de código — arquivar pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/archive" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "archived": true,
    "…": "…"
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/unarchive Desarquivar pipeline

Exemplos de código — desarquivar pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/unarchive" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "archived": false,
    "…": "…"
  }
}
DELETE https://api.atys.pro/api/v1/crm/pipelines/{id} Excluir pipeline arquivado

Exemplos de código — excluir pipeline arquivado

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/pipelines/12" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Equipe e etiquetas do pipeline

A equipe é quem vê o pipeline no CRM. O PUT substitui a lista inteira e precisa manter pelo menos um gestor ou administrador; só um administrador da empresa altera a equipe. As etiquetas do pipeline são as etiquetas de negócio sugeridas nele (PUT com [] limpa).

Mantenha o usuário API na equipe. A chave enxerga só os pipelines em que o usuário API está: se o PUT o deixar de fora, o pipeline some de GET /crm/pipelines e ele e os negócios dele passam a responder 404 para a chave. O id do usuário API aparece no GET da equipe abaixo (o catálogo de usuários lista só as pessoas da empresa). Comece sempre pelo GET e envie a lista atual com as mudanças.
GET https://api.atys.pro/api/v1/crm/pipelines/{id}/users Equipe do pipeline

Exemplos de código — equipe do pipeline

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines/12/users" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 77,
      "name": "Carlos Vendedor",
      "email": "carlos@empresa.com"
    }
  ]
}
PUT https://api.atys.pro/api/v1/crm/pipelines/{id}/users Definir a equipe do pipeline

Exemplos de código — definir a equipe do pipeline

cURL
curl -X PUT "https://api.atys.pro/api/v1/crm/pipelines/12/users" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "user_ids": [77, 81]
  }'
200 OK
{
  "data": [
    {
      "id": 77,
      "name": "Carlos Vendedor",
      "email": "carlos@empresa.com"
    },
    {
      "id": 81,
      "name": "Ana Gestora",
      "email": "ana@empresa.com"
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/pipelines/{id}/tags Etiquetas do pipeline

Exemplos de código — etiquetas do pipeline

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines/12/tags" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 9,
      "name": "VIP",
      "description": null,
      "color": "#f59e0b"
    }
  ]
}
PUT https://api.atys.pro/api/v1/crm/pipelines/{id}/tags Definir as etiquetas do pipeline

Exemplos de código — definir as etiquetas do pipeline

cURL
curl -X PUT "https://api.atys.pro/api/v1/crm/pipelines/12/tags" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "tag_ids": [9]
  }'
200 OK
{
  "data": [
    {
      "id": 9,
      "name": "VIP",
      "description": null,
      "color": "#f59e0b"
    }
  ]
}

Etapas

Etapa nova entra no fim do pipeline; para mudar a posição, reordene enviando todas as etapas. As etapas com is_protected: true (Lead novo, Ganho e Perdido do funil de vendas) aceitam cor e descrição, mas não mudam de nome nem são excluídas (protected_stage). Atenção: excluir uma etapa exclui junto os negócios que estão só nela, como na plataforma.

CampoTipoObrigatórioDescrição
namestring (100)SimNome da etapa.
colorstringNãoHexadecimal #RRGGBB; default #1976d2.
descriptionstring (300)NãoDescrição curta.
max_days_in_stageintegerNãoTempo máximo, em dias, que o negócio deve ficar na etapa.
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/stages Criar etapa

Exemplos de código — criar etapa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/stages" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Proposta",
    "color": "#f59e0b",
    "max_days_in_stage": 7
  }'
201 Created
{
  "data": {
    "id": 104,
    "pipeline_id": 12,
    "name": "Proposta",
    "description": "",
    "color": "#f59e0b",
    "order": 4,
    "max_days_in_stage": 7,
    "is_won": false,
    "is_lost": false,
    "is_protected": false
  }
}
PATCH https://api.atys.pro/api/v1/crm/stages/{stageId} Editar etapa

Exemplos de código — editar etapa

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/stages/104" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Proposta enviada"
  }'
200 OK
{
  "data": {
    "id": 104,
    "pipeline_id": 12,
    "name": "Proposta enviada",
    "description": "",
    "color": "#f59e0b",
    "order": 4,
    "max_days_in_stage": 7,
    "is_won": false,
    "is_lost": false,
    "is_protected": false
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/stages/reorder Reordenar etapas

Exemplos de código — reordenar etapas

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/stages/reorder" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "stage_ids": [101, 104, 102, 103]
  }'
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "stages": "… na ordem nova",
    "…": "…"
  }
}
DELETE https://api.atys.pro/api/v1/crm/stages/{stageId} Excluir etapa

Exemplos de código — excluir etapa

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/stages/104" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Tarefas padrão da etapa

Toda vez que um negócio entra na etapa, ele ganha estas tarefas. days_after_entry define o prazo (dias depois da entrada); is_required: true impede o negócio de sair da etapa com a tarefa aberta. Na criação, apply_to_existing_businesses cria a tarefa também nos negócios que já estão na etapa; na edição, update_open_business_tasks leva a mudança às tarefas ainda abertas.

CampoTipoObrigatórioDescrição
namestring (100)SimTítulo da tarefa.
descriptionstringNãoInstruções.
is_requiredbooleanNãoDefault false.
days_after_entryintegerNãoPrazo em dias a partir da entrada na etapa.
apply_to_existing_businessesbooleanNãoCriar também nos negócios que já estão na etapa.
update_open_business_tasksbooleanNãoSó no PATCH: atualizar as tarefas abertas já criadas.
GET https://api.atys.pro/api/v1/crm/stages/{stageId}/tasks Listar tarefas padrão da etapa

Exemplos de código — listar tarefas padrão da etapa

cURL
curl "https://api.atys.pro/api/v1/crm/stages/104/tasks" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 31,
      "stage_id": 104,
      "name": "Enviar proposta",
      "description": null,
      "order": 1,
      "is_required": true,
      "days_after_entry": 2
    }
  ]
}
POST https://api.atys.pro/api/v1/crm/stages/{stageId}/tasks Criar tarefa padrão

Exemplos de código — criar tarefa padrão

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/stages/104/tasks" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Enviar proposta",
    "is_required": true,
    "days_after_entry": 2,
    "apply_to_existing_businesses": true
  }'
201 Created
{
  "data": {
    "id": 31,
    "stage_id": 104,
    "name": "Enviar proposta",
    "description": null,
    "order": 1,
    "is_required": true,
    "days_after_entry": 2
  }
}
PATCH https://api.atys.pro/api/v1/crm/stage-tasks/{itemId} Editar tarefa padrão

Exemplos de código — editar tarefa padrão

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/stage-tasks/31" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "days_after_entry": 3,
    "update_open_business_tasks": true
  }'
200 OK
{
  "data": {
    "id": 31,
    "stage_id": 104,
    "name": "Enviar proposta",
    "description": null,
    "order": 1,
    "is_required": true,
    "days_after_entry": 3
  }
}
DELETE https://api.atys.pro/api/v1/crm/stage-tasks/{itemId} Excluir tarefa padrão

Exemplos de código — excluir tarefa padrão

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/stage-tasks/31" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Campos personalizados

Os campos que os negócios do pipeline têm. Ao criar, cada negócio do pipeline ganha o campo vazio. Campos com mandatory: true são do sistema e não se editam nem excluem (protected_field). Excluir apaga o valor do campo em todos os negócios: consulte antes o uso. Reordenar recebe todos os campos do pipeline.

CampoTipoObrigatórioDescrição
namestring (100)SimNome do campo.
typestringSimtext, textarea, number, price, percentage, date, email, cpf_cnpj, cep, phone, checkbox ou select.
optionsstring[]Com selectOpções do campo de seleção.
descriptionstring (200)NãoAjuda exibida no negócio.
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/custom-fields Criar campo personalizado

Exemplos de código — criar campo personalizado

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/custom-fields" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Canal",
    "type": "select",
    "options": ["Site", "Indicação"]
  }'
201 Created
{
  "data": {
    "id": 57,
    "pipeline_id": 12,
    "name": "Canal",
    "type": "select",
    "description": null,
    "options": [
      "Site",
      "Indicação"
    ],
    "order": 3,
    "mandatory": false
  }
}
PATCH https://api.atys.pro/api/v1/crm/custom-fields/{fieldId} Editar campo personalizado

Exemplos de código — editar campo personalizado

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/custom-fields/57" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "options": ["Site", "Indicação", "Evento"]
  }'
200 OK
{
  "data": {
    "id": 57,
    "pipeline_id": 12,
    "name": "Canal",
    "type": "select",
    "description": null,
    "options": [
      "Site",
      "Indicação",
      "Evento"
    ],
    "order": 3,
    "mandatory": false
  }
}
GET https://api.atys.pro/api/v1/crm/custom-fields/{fieldId}/usage Uso do campo (antes de excluir)

Exemplos de código — uso do campo (antes de excluir)

cURL
curl "https://api.atys.pro/api/v1/crm/custom-fields/57/usage" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "businesses_with_data": 42,
    "archived_with_data": 3
  }
}
POST https://api.atys.pro/api/v1/crm/pipelines/{id}/custom-fields/reorder Reordenar campos

Exemplos de código — reordenar campos

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/pipelines/12/custom-fields/reorder" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "field_ids": [55, 57, 56]
  }'
200 OK
{
  "data": {
    "id": 12,
    "name": "Vendas B2B",
    "custom_fields": "… na ordem nova",
    "…": "…"
  }
}
DELETE https://api.atys.pro/api/v1/crm/custom-fields/{fieldId} Excluir campo personalizado

Exemplos de código — excluir campo personalizado

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/custom-fields/57" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Campos obrigatórios por etapa

Campos que o negócio precisa ter preenchidos para entrar na etapa; sem eles, mover responde mandatory_fields_missing. O PUT substitui a lista da etapa (as outras etapas ficam como estão) e só aceita campos do mesmo pipeline (unknown_custom_field).

GET https://api.atys.pro/api/v1/crm/stages/{stageId}/mandatory-fields Obrigatórios da etapa

Exemplos de código — obrigatórios da etapa

cURL
curl "https://api.atys.pro/api/v1/crm/stages/102/mandatory-fields" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 55,
      "pipeline_id": 12,
      "name": "Valor do Negócio",
      "type": "price",
      "description": "Valor do Negócio",
      "options": null,
      "order": 1,
      "mandatory": true
    }
  ]
}
PUT https://api.atys.pro/api/v1/crm/stages/{stageId}/mandatory-fields Definir obrigatórios da etapa

Exemplos de código — definir obrigatórios da etapa

cURL
curl -X PUT "https://api.atys.pro/api/v1/crm/stages/102/mandatory-fields" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "field_ids": [55, 57]
  }'
200 OK
{
  "data": [
    {
      "id": 55,
      "pipeline_id": 12,
      "name": "Valor do Negócio",
      "type": "price",
      "description": "Valor do Negócio",
      "options": null,
      "order": 1,
      "mandatory": true
    },
    {
      "id": 57,
      "pipeline_id": 12,
      "name": "Canal",
      "type": "select",
      "description": null,
      "options": [
        "Site",
        "Indicação"
      ],
      "order": 3,
      "mandatory": false
    }
  ]
}

Etiquetas de negócio

Crie e edite as etiquetas que aparecem em GET /tags. Sem sector_ids nem user_ids, a etiqueta vale para todos; com vínculo, só os usuários do setor (ou os colaboradores indicados) a veem e usam. Enviar a lista no PATCH substitui o vínculo. Uma etiqueta usada na configuração de um workflow não é excluída (409 tag_in_use_by_workflow).

CampoTipoObrigatórioDescrição
namestring (50)SimNome da etiqueta.
colorstringSimHexadecimal #RRGGBB.
descriptionstring (400)NãoDescrição.
sector_idsinteger[]NãoSetores da empresa que veem a etiqueta.
user_idsinteger[]NãoColaboradores da empresa que veem a etiqueta.
POST https://api.atys.pro/api/v1/crm/tags Criar etiqueta de negócio

Exemplos de código — criar etiqueta de negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/tags" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "VIP",
    "color": "#f59e0b"
  }'
201 Created
{
  "data": {
    "id": 9,
    "name": "VIP",
    "description": null,
    "color": "#f59e0b",
    "sector_ids": [],
    "user_ids": []
  }
}
PATCH https://api.atys.pro/api/v1/crm/tags/{id} Editar etiqueta de negócio

Exemplos de código — editar etiqueta de negócio

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/tags/9" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "color": "#10b981",
    "sector_ids": [4]
  }'
200 OK
{
  "data": {
    "id": 9,
    "name": "VIP",
    "description": null,
    "color": "#10b981",
    "sector_ids": [
      4
    ],
    "user_ids": []
  }
}
DELETE https://api.atys.pro/api/v1/crm/tags/{id} Excluir etiqueta de negócio

Exemplos de código — excluir etiqueta de negócio

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/tags/9" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Cadastrar motivos de perda

O nome não se repete na empresa, sem diferenciar maiúsculas (duplicate_name). Para tirar um motivo de uso sem perder o histórico, envie is_active: false: ele sai de GET /lost-reasons, mas os negócios já perdidos continuam com ele. Excluir também preserva o motivo nos negócios já perdidos.

CampoTipoObrigatórioDescrição
namestring (100)SimNome do motivo.
descriptionstring (200)NãoDescrição.
orderintegerNãoPosição na lista; default no fim.
is_activebooleanNãoDefault true.
POST https://api.atys.pro/api/v1/crm/lost-reasons Criar motivo de perda

Exemplos de código — criar motivo de perda

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/lost-reasons" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Preço",
    "description": "Acima do orçamento"
  }'
201 Created
{
  "data": {
    "id": 4,
    "name": "Preço",
    "description": "Acima do orçamento",
    "order": 1,
    "is_active": true
  }
}
PATCH https://api.atys.pro/api/v1/crm/lost-reasons/{id} Editar ou desativar motivo de perda

Exemplos de código — editar ou desativar motivo de perda

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/lost-reasons/4" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "is_active": false
  }'
200 OK
{
  "data": {
    "id": 4,
    "name": "Preço",
    "description": "Acima do orçamento",
    "order": 1,
    "is_active": false
  }
}
DELETE https://api.atys.pro/api/v1/crm/lost-reasons/{id} Excluir motivo de perda

Exemplos de código — excluir motivo de perda

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/lost-reasons/4" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Gatilhos por mensagem

Quando o atendente envia uma mensagem (pela Atys ou pelo celular) que contém a phrase — sem diferenciar maiúsculas nem acentos —, a ação roda no negócio aberto do contato. Desative com is_active: false para pausar sem excluir.

CampoTipoObrigatórioDescrição
namestring (120)SimNome da regra.
phrasestring (3–255)SimTrecho procurado na mensagem.
action_typestringSimmove_stage (mover para stage_id), assign_tag (aplicar tag_id), assign_sender (tornar o atendente responsável) ou workflow_only (só dispara workflows).
stage_idintegerCom move_stageEtapa de destino; o pipeline da regra passa a ser o da etapa.
lost_reason_idintegerNãoMotivo usado quando a etapa de destino é de perda.
tag_idintegerCom assign_tagEtiqueta de negócio.
pipeline_idintegerNãoLimita a regra aos negócios desse pipeline (nas ações sem etapa).
is_activebooleanNãoDefault true.
GET https://api.atys.pro/api/v1/crm/message-triggers Listar gatilhos

Exemplos de código — listar gatilhos

cURL
curl "https://api.atys.pro/api/v1/crm/message-triggers?is_active=1" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 7,
      "name": "Pedido confirmado",
      "phrase": "pedido confirmado",
      "action_type": "move_stage",
      "pipeline_id": 12,
      "stage_id": 102,
      "tag_id": null,
      "lost_reason_id": null,
      "is_active": true,
      "created_at": "2026-11-04T15:20:00-03:00",
      "updated_at": "2026-11-04T15:20:00-03:00"
    }
  ]
}
GET https://api.atys.pro/api/v1/crm/message-triggers/{id} Ver gatilho

Exemplos de código — ver gatilho

cURL
curl "https://api.atys.pro/api/v1/crm/message-triggers/7" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 7,
    "name": "Pedido confirmado",
    "phrase": "pedido confirmado",
    "action_type": "move_stage",
    "pipeline_id": 12,
    "stage_id": 102,
    "tag_id": null,
    "lost_reason_id": null,
    "is_active": true,
    "created_at": "2026-11-04T15:20:00-03:00",
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
POST https://api.atys.pro/api/v1/crm/message-triggers Criar gatilho

Exemplos de código — criar gatilho

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/message-triggers" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Pedido confirmado",
    "phrase": "pedido confirmado",
    "action_type": "move_stage",
    "stage_id": 102
  }'
201 Created
{
  "data": {
    "id": 7,
    "name": "Pedido confirmado",
    "phrase": "pedido confirmado",
    "action_type": "move_stage",
    "pipeline_id": 12,
    "stage_id": 102,
    "tag_id": null,
    "lost_reason_id": null,
    "is_active": true,
    "created_at": "2026-11-04T15:20:00-03:00",
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
PATCH https://api.atys.pro/api/v1/crm/message-triggers/{id} Editar gatilho

Exemplos de código — editar gatilho

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/message-triggers/7" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "is_active": false
  }'
200 OK
{
  "data": {
    "id": 7,
    "name": "Pedido confirmado",
    "phrase": "pedido confirmado",
    "action_type": "move_stage",
    "pipeline_id": 12,
    "stage_id": 102,
    "tag_id": null,
    "lost_reason_id": null,
    "is_active": false,
    "created_at": "2026-11-04T15:20:00-03:00",
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/message-triggers/{id} Excluir gatilho

Exemplos de código — excluir gatilho

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/message-triggers/7" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Criar negócio

Sem stage_id o negócio entra na primeira etapa do pipeline. O histórico registra a criação, as automações da etapa disparam e o webhook crm.business.created é enviado.

CampoTipoObrigatórioDescrição
titlestring (300)SimTítulo do negócio.
pipeline_idintegerSimPipeline de destino (pipelines).
stage_idintegerNãoEtapa inicial; default a primeira do pipeline.
descriptionstring (300)NãoDescrição curta.
contact_idsinteger[]NãoContatos da empresa vinculados ao negócio.
owner_idsinteger[]NãoUsuários responsáveis (usuários).
tag_idsinteger[]NãoEtiquetas do negócio (etiquetas).
custom_fieldsarrayNão[{"field_id": 55, "value": "1500"}] — ids de pipelines.
priority_id / source_idintegerNãoPrioridade e origem (catálogos).
notestringNãoPrimeira nota do negócio.
POST https://api.atys.pro/api/v1/crm/businesses Criar negócio

Exemplos de código — criar negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Pedido 123",
    "pipeline_id": 12,
    "contact_ids": [3021],
    "owner_ids": [77],
    "tag_ids": [9],
    "custom_fields": [
      {
        "field_id": 55,
        "value": "1500"
      }
    ],
    "note": "Lead vindo do ERP"
  }'
201 Created
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}

Listar negócios

ParâmetroTipoDescrição
pipeline_idintegerSó negócios deste pipeline.
stage_idintegerSó negócios nesta etapa.
contact_idintegerSó negócios deste contato.
statusstringopen, won ou lost.
archivedbooleanDefault false.
updated_sincedata ISO 8601Alterados a partir desta data — use para sincronização incremental.
page / per_pageintegerPaginação; per_page de 1 a 100 (default 25).
GET https://api.atys.pro/api/v1/crm/businesses Listar negócios com filtros

Exemplos de código — listar negócios com filtros

cURL
curl "https://api.atys.pro/api/v1/crm/businesses?pipeline_id=12&status=open&per_page=50" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 8841,
      "title": "Pedido 123",
      "status": "open",
      "...": "..."
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 50,
    "total": 1,
    "last_page": 1
  }
}

Ver um negócio

A base deste objeto é a mesma do payload dos webhooks crm.business.*. status é open, won (com sold_at) ou lost (com canceled_at e lost_reason).

GET https://api.atys.pro/api/v1/crm/businesses/{id} Detalhe do negócio

Exemplos de código — detalhe do negócio

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}

Editar negócio

Envie só o que muda: title, description, priority_id, source_id, custom_fields, contact_ids, owner_ids e tag_ids. As três listas substituem a atual (envie [] para limpar). A etapa não muda por aqui: use mover.

PATCH https://api.atys.pro/api/v1/crm/businesses/{id} Editar negócio

Exemplos de código — editar negócio

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Pedido 123 (revisado)",
    "custom_fields": [
      {
        "field_id": 55,
        "value": "1800"
      }
    ]
  }'
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123 (revisado)",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}

Mover de etapa

Body: stage_id (obrigatório) e, se a etapa for de perda, lost_reason_id. Valem as regras da etapa configuradas na plataforma: campos obrigatórios e tarefas obrigatórias pendentes impedem a movimentação (422, ver erros).

POST https://api.atys.pro/api/v1/crm/businesses/{id}/move Mover para outra etapa

Exemplos de código — mover para outra etapa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/move" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "stage_id": 102
  }'
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 102,
      "name": "Proposta"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}

Ganhar e perder

Atalhos que movem o negócio para a etapa de ganho (is_won) ou de perda (is_lost) do pipeline dele. Perder aceita lost_reason_id (motivos de perda).

POST https://api.atys.pro/api/v1/crm/businesses/{id}/win Marcar como ganho

Exemplos de código — marcar como ganho

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/win" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": "2026-11-05T10:00:00-03:00",
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 103,
      "name": "Ganho"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "won",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
POST https://api.atys.pro/api/v1/crm/businesses/{id}/lose Marcar como perdido

Exemplos de código — marcar como perdido

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/lose" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "lost_reason_id": 4
  }'
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": "2026-11-05T10:00:00-03:00",
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "lost",
    "lost_reason": {
      "id": 4,
      "name": "Preço"
    },
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}

Arquivar e excluir

Arquivar tira o negócio do funil sem perder nada; ele continua acessível em GET /businesses?archived=true. Excluir exige a permissão Excluir negócios do CRM na chave.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/archive Arquivar negócio

Exemplos de código — arquivar negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/archive" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": true,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
POST https://api.atys.pro/api/v1/crm/businesses/{id}/unarchive Desarquivar negócio

Exemplos de código — desarquivar negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/unarchive" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123",
    "description": null,
    "score": null,
    "archived": false,
    "sold_at": null,
    "canceled_at": null,
    "priority_id": 2,
    "source": {
      "id": 1,
      "name": "Manual"
    },
    "pipeline": {
      "id": 12,
      "name": "Vendas B2B"
    },
    "stage": {
      "id": 101,
      "name": "Novo"
    },
    "created_at": "2026-11-04T15:20:00-03:00",
    "status": "open",
    "lost_reason": null,
    "contacts": [
      {
        "id": 3021,
        "name": "Maria Cliente"
      }
    ],
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ],
    "tags": [
      {
        "id": 9,
        "name": "VIP",
        "color": "#f59e0b"
      }
    ],
    "custom_fields": [
      {
        "field_id": 55,
        "name": "Valor",
        "type": "number",
        "value": "1500"
      }
    ],
    "updated_at": "2026-11-04T15:20:00-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id} Excluir negócio

Exemplos de código — excluir negócio

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Notas

Body: text (obrigatório, até 10.000 caracteres). A nota aparece no negócio com o usuário API como autor e dispara as automações de atividade. Notas geradas pela plataforma ("system": true) não podem ser editadas nem excluídas (note_locked). A listagem vem da mais recente para a mais antiga e aceita page e per_page.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/notes Criar nota

Exemplos de código — criar nota

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/notes" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Cliente pediu proposta com 5% de desconto."
  }'
201 Created
{
  "data": {
    "id": 5120,
    "business_id": 8841,
    "text": "Cliente pediu proposta com 5% de desconto.",
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "system": false,
    "created_at": "2026-11-04T16:02:11-03:00",
    "updated_at": "2026-11-04T16:02:11-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/notes Listar notas

Exemplos de código — listar notas

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/notes" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 5120,
      "business_id": 8841,
      "text": "Cliente pediu proposta com 5% de desconto.",
      "author": {
        "id": 90,
        "name": "Integração ERP"
      },
      "system": false,
      "created_at": "2026-11-04T16:02:11-03:00",
      "updated_at": "2026-11-04T16:02:11-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "last_page": 1
  }
}
PATCH https://api.atys.pro/api/v1/crm/businesses/{id}/notes/{noteId} Editar nota

Exemplos de código — editar nota

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841/notes/5120" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Desconto aprovado: 5%."
  }'
200 OK
{
  "data": {
    "id": 5120,
    "business_id": 8841,
    "text": "Desconto aprovado: 5%.",
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "system": false,
    "created_at": "2026-11-04T16:02:11-03:00",
    "updated_at": "2026-11-04T16:02:11-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/notes/{noteId} Excluir nota

Exemplos de código — excluir nota

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/notes/5120" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Tarefas

CampoTipoObrigatórioDescrição
titlestring (255)SimO que fazer.
typestringNãocall, email, meeting, whatsapp, visit, followup ou other.
due_atdata ISO 8601NãoPrazo. Tarefas vencidas geram o aviso de atraso da plataforma.
assignee_idintegerNãoResponsável pela tarefa (usuários); default o usuário API.
descriptionstringNãoDetalhes.

No PATCH envie só o que muda. Tarefas obrigatórias da etapa bloqueiam o mover enquanto estiverem abertas: conclua-as com /complete. A listagem aceita status=open|completed.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/tasks Criar tarefa

Exemplos de código — criar tarefa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/tasks" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Ligar para confirmar o pedido",
    "type": "call",
    "due_at": "2026-11-10T10:00:00-03:00",
    "assignee_id": 77
  }'
201 Created
{
  "data": {
    "id": 731,
    "business_id": 8841,
    "title": "Ligar para confirmar o pedido",
    "type": "call",
    "description": null,
    "due_at": "2026-11-10T10:00:00-03:00",
    "completed_at": null,
    "status": "open",
    "assignee": {
      "id": 77,
      "name": "Carlos Vendedor"
    },
    "created_at": "2026-11-04T16:05:40-03:00",
    "updated_at": "2026-11-04T16:05:40-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/tasks Listar tarefas

Exemplos de código — listar tarefas

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/tasks?status=open" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 731,
      "business_id": 8841,
      "title": "Ligar para confirmar o pedido",
      "type": "call",
      "description": null,
      "due_at": "2026-11-10T10:00:00-03:00",
      "completed_at": null,
      "status": "open",
      "assignee": {
        "id": 77,
        "name": "Carlos Vendedor"
      },
      "created_at": "2026-11-04T16:05:40-03:00",
      "updated_at": "2026-11-04T16:05:40-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "last_page": 1
  }
}
PATCH https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId} Editar tarefa

Exemplos de código — editar tarefa

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "due_at": "2026-11-12T14:00:00-03:00"
  }'
200 OK
{
  "data": {
    "id": 731,
    "business_id": 8841,
    "title": "Ligar para confirmar o pedido",
    "type": "call",
    "description": null,
    "due_at": "2026-11-12T14:00:00-03:00",
    "completed_at": null,
    "status": "open",
    "assignee": {
      "id": 77,
      "name": "Carlos Vendedor"
    },
    "created_at": "2026-11-04T16:05:40-03:00",
    "updated_at": "2026-11-04T16:05:40-03:00"
  }
}
POST https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId}/complete Concluir tarefa

Exemplos de código — concluir tarefa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731/complete" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 731,
    "business_id": 8841,
    "title": "Ligar para confirmar o pedido",
    "type": "call",
    "description": null,
    "due_at": "2026-11-10T10:00:00-03:00",
    "completed_at": "2026-11-10T09:40:00-03:00",
    "status": "completed",
    "assignee": {
      "id": 77,
      "name": "Carlos Vendedor"
    },
    "created_at": "2026-11-04T16:05:40-03:00",
    "updated_at": "2026-11-04T16:05:40-03:00"
  }
}
POST https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId}/reopen Reabrir tarefa

Exemplos de código — reabrir tarefa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731/reopen" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "id": 731,
    "business_id": 8841,
    "title": "Ligar para confirmar o pedido",
    "type": "call",
    "description": null,
    "due_at": "2026-11-10T10:00:00-03:00",
    "completed_at": null,
    "status": "open",
    "assignee": {
      "id": 77,
      "name": "Carlos Vendedor"
    },
    "created_at": "2026-11-04T16:05:40-03:00",
    "updated_at": "2026-11-04T16:05:40-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId} Excluir tarefa

Exemplos de código — excluir tarefa

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Histórico

Tudo o que aconteceu no negócio, mais recente primeiro — feito na tela, por automação ou pela API. Somente leitura. type identifica a ação (por exemplo BUSINESS_CREATED, TASK_COMPLETED); aceita page e per_page.

GET https://api.atys.pro/api/v1/crm/businesses/{id}/history Linha do tempo do negócio

Exemplos de código — linha do tempo do negócio

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/history" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 99012,
      "business_id": 8841,
      "type": "TASK_COMPLETED",
      "category": "task",
      "description": "Usuário Integração ERP concluiu a tarefa: Ligar para confirmar o pedido",
      "pipeline": {
        "id": 12,
        "name": "Vendas B2B"
      },
      "user": {
        "id": 90,
        "name": "Integração ERP"
      },
      "created_at": "2026-11-04T16:30:00-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 7,
    "last_page": 1
  }
}

Pipelines do negócio

Um negócio pode estar em mais de um pipeline ao mesmo tempo (por exemplo, Vendas e Pós-venda). Esta consulta mostra em quais ele está e a etapa atual em cada um. original marca o pipeline em que o negócio nasceu (ou para onde foi transferido por último).

GET https://api.atys.pro/api/v1/crm/businesses/{id}/pipelines Pipelines em que o negócio está

Exemplos de código — pipelines em que o negócio está

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/pipelines" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "pipeline": {
        "id": 12,
        "name": "Vendas"
      },
      "stage": {
        "id": 150,
        "name": "Proposta",
        "is_won": false,
        "is_lost": false
      },
      "original": true,
      "entered_at": "2026-11-02T10:15:00-03:00"
    },
    {
      "pipeline": {
        "id": 15,
        "name": "Pós-venda"
      },
      "stage": {
        "id": 201,
        "name": "Onboarding",
        "is_won": false,
        "is_lost": false
      },
      "original": false,
      "entered_at": "2026-11-04T16:20:00-03:00"
    }
  ]
}

Transferir entre pipelines

Move o negócio de um pipeline para outro, como o botão Transferir da plataforma: o pipeline de origem deixa de ter o negócio, e notas, tarefas manuais, agendamentos e histórico passam para o destino. Para trocar de etapa dentro do mesmo pipeline, use mover.

CampoTipoObrigatórioDescrição
pipeline_idintegerSimPipeline de destino. Precisa ser visível para o usuário API.
stage_idintegerNãoEtapa do pipeline de destino. Sem ela, entra na primeira etapa aberta.
from_pipeline_idintegerNãoPipeline de origem, se o negócio estiver em mais de um. Default: o primeiro.
owner_idsarray de integerNãoResponsáveis no destino. Sem o campo, mantém os da origem; [] transfere sem responsável. Todos precisam ver o pipeline de destino.
tag_idsarray de integerNãoEtiquetas no destino. Sem o campo, mantém as da origem. Precisam estar vinculadas ao pipeline de destino.
custom_fields_modestringNãoauto (default) copia os campos de mesmo nome e tipo; selected copia só os de custom_field_ids, criando no destino os que faltarem; none não copia nada.
custom_field_idsarray de integerCom selectedCampos do pipeline de origem a levar.

Em todos os modos, os valores da origem ficam registrados numa nota do sistema no negócio. Responsável sem acesso ao destino ou etiqueta não vinculada devolvem transfer_rejected e nada muda.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/transfer Transferir negócio

Exemplos de código — transferir negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/transfer" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "pipeline_id": 15,
    "stage_id": 201,
    "owner_ids": [77],
    "custom_fields_mode": "auto"
  }'
200 OK
{
  "data": {
    "id": 8841,
    "title": "Pedido 123 — Loja Centro",
    "pipeline": {
      "id": 15,
      "name": "Pós-venda"
    },
    "stage": {
      "id": 201,
      "name": "Onboarding"
    },
    "status": "open",
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ]
  }
}

Clonar negócio

Cria um negócio novo a partir de outro, em qualquer pipeline visível: copia contatos, responsáveis, etiquetas, campos personalizados, notas, tarefas (reabertas) e histórico. O original não muda. Body: title e pipeline_id (obrigatórios) e stage_id (opcional, default a primeira etapa aberta). Responde 201 com o negócio novo.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/clone Clonar negócio

Exemplos de código — clonar negócio

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/clone" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Pedido 124 — Loja Centro",
    "pipeline_id": 12,
    "stage_id": 150
  }'
201 Created
{
  "data": {
    "id": 8902,
    "title": "Pedido 124 — Loja Centro",
    "pipeline": {
      "id": 12,
      "name": "Vendas"
    },
    "stage": {
      "id": 150,
      "name": "Proposta"
    },
    "status": "open",
    "owners": [
      {
        "id": 77,
        "name": "Carlos Vendedor"
      }
    ]
  }
}

Associar a outros pipelines

Diferente de transferir, associar mantém o negócio onde está e o coloca também em outro pipeline — é o "Associar a outro pipeline" da plataforma. Os responsáveis do pipeline atual são copiados e os campos de mesmo nome e tipo herdam o valor. Body: pipeline_id e stage_id (opcional). A resposta é a lista atualizada de pipelines do negócio.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/pipelines Associar a outro pipeline

Exemplos de código — associar a outro pipeline

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/pipelines" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "pipeline_id": 15,
    "stage_id": 201
  }'
201 Created
{
  "data": [
    {
      "pipeline": {
        "id": 12,
        "name": "Vendas"
      },
      "stage": {
        "id": 150,
        "name": "Proposta",
        "is_won": false,
        "is_lost": false
      },
      "original": true,
      "entered_at": "2026-11-02T10:15:00-03:00"
    },
    {
      "pipeline": {
        "id": 15,
        "name": "Pós-venda"
      },
      "stage": {
        "id": 201,
        "name": "Onboarding",
        "is_won": false,
        "is_lost": false
      },
      "original": false,
      "entered_at": "2026-11-04T16:20:00-03:00"
    }
  ]
}

Para tirar o negócio de um pipeline, informe o id do pipeline. Saem junto as notas, tarefas, agendamentos, campos e histórico daquele pipeline. O negócio precisa continuar em pelo menos um (last_pipeline).

DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/pipelines/{pipelineId} Remover de um pipeline

Exemplos de código — remover de um pipeline

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/pipelines/15" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Importação em lote

Cria até 100 negócios por chamada num pipeline, cada um pela mesma regra do criar negócio (histórico, automações, webhooks). stage_id vale para o lote inteiro (default: a primeira etapa aberta). Cada item aceita os campos do criar: title, description, contact_ids, owner_ids, tag_ids, priority_id, source_id, custom_fields e note.

A resposta é 200 mesmo com falhas: data traz um resultado por item, na ordem enviada (index), com o id criado ou o error. Item com erro não grava nada e não impede os demais; reenvie só os que falharam.

POST https://api.atys.pro/api/v1/crm/businesses/import Importar negócios

Exemplos de código — importar negócios

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/import" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "pipeline_id": 12,
    "stage_id": 150,
    "businesses": [
      {
        "title": "Pedido 125",
        "contact_ids": [5120],
        "owner_ids": [77],
        "custom_fields": [
          {
            "field_id": 55,
            "value": "1500"
          }
        ]
      },
      {
        "title": "Pedido 126",
        "owner_ids": [999]
      }
    ]
  }'
200 OK
{
  "data": [
    {
      "index": 0,
      "id": 8903
    },
    {
      "index": 1,
      "error": {
        "code": "invalid_owner",
        "message": "Responsável não encontrado na empresa."
      }
    }
  ],
  "meta": {
    "total": 2,
    "created": 1,
    "failed": 1
  }
}

Precisa que o usuário API tenha a permissão Importar negócios do CRM.

Bloquear usuários

Esconde o negócio de usuários específicos da equipe, como em Visibilidade do negócio na plataforma. A lista mostra quem vê o pipeline do negócio, com blocked e responsible. O PUT substitui a lista inteira de bloqueados ([] libera todos).

GET https://api.atys.pro/api/v1/crm/businesses/{id}/blocked-users Usuários e bloqueios

Exemplos de código — usuários e bloqueios

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/blocked-users" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 77,
      "name": "Carlos Vendedor",
      "email": "carlos@loja.com.br",
      "blocked": false,
      "responsible": true
    },
    {
      "id": 81,
      "name": "Ana Suporte",
      "email": "ana@loja.com.br",
      "blocked": true,
      "responsible": false
    }
  ]
}
PUT https://api.atys.pro/api/v1/crm/businesses/{id}/blocked-users Definir usuários bloqueados

Exemplos de código — definir usuários bloqueados

cURL
curl -X PUT "https://api.atys.pro/api/v1/crm/businesses/8841/blocked-users" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "user_ids": [81]
  }'
200 OK
{
  "data": [
    {
      "id": 77,
      "name": "Carlos Vendedor",
      "email": "carlos@loja.com.br",
      "blocked": false,
      "responsible": true
    },
    {
      "id": 81,
      "name": "Ana Suporte",
      "email": "ana@loja.com.br",
      "blocked": true,
      "responsible": false
    }
  ]
}
ErroQuando
invalid_userUsuário que não é da empresa.
user_not_in_pipelineUsuário que nem vê o pipeline do negócio.
responsible_cannot_be_blockedResponsável do negócio — remova-o dos responsáveis antes.
last_visible_userBloquearia todo mundo: ao menos um usuário precisa ver o negócio.

Origem do negócio

De onde o lead veio: first é o primeiro ponto de contato (de preferência um com campanha) e last, o mais recente — campanha, conjunto, anúncio, palavra-chave, UTMs e, quando houver, o criativo. As duas pontas vêm null quando o negócio não tem atribuição.

GET https://api.atys.pro/api/v1/crm/businesses/{id}/origin Origem do negócio

Exemplos de código — origem do negócio

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/origin" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "first": {
      "touchpoint_id": 5521,
      "captured_at": "2026-10-30T14:02:00-03:00",
      "channel_type": "whatsapp",
      "platform": "meta",
      "campaign_name": "Black Friday 2026",
      "adset_name": "Remarketing 30d",
      "ad_name": "Vídeo depoimento",
      "keyword": null,
      "headline": "Até 40% off",
      "source_url": null,
      "utm_source": "facebook",
      "utm_medium": "paid",
      "external_campaign_id": "120210000000001",
      "external_ad_id": "120210000000077",
      "creative": null
    },
    "last": {
      "touchpoint_id": 5600,
      "captured_at": "2026-11-03T09:12:00-03:00",
      "channel_type": "site",
      "platform": "google",
      "campaign_name": "Pesquisa Marca",
      "adset_name": null,
      "ad_name": null,
      "keyword": "loja centro",
      "headline": "Até 40% off",
      "source_url": null,
      "utm_source": "google",
      "utm_medium": "cpc",
      "external_campaign_id": "120210000000001",
      "external_ad_id": "120210000000077",
      "creative": null
    }
  }
}

As campanhas que trouxeram leads para a empresa no último ano, para montar filtros e relatórios:

GET https://api.atys.pro/api/v1/crm/origin-campaigns Campanhas de origem

Exemplos de código — campanhas de origem

cURL
curl "https://api.atys.pro/api/v1/crm/origin-campaigns" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "platform": "meta",
      "name": "Black Friday 2026",
      "leads": 184,
      "last_seen": "2026-11-04 15:40:00",
      "status": "ACTIVE",
      "effective_status": "ACTIVE"
    }
  ]
}

Agendamentos de WhatsApp

Agenda uma mensagem de WhatsApp para contatos do negócio, enviada pelo canal escolhido no horário marcado — o mesmo agendamento da aba WhatsApp do negócio. Variáveis como {{nome}} são trocadas no envio. Para enviar já, use o horário atual.

CampoTipoObrigatórioDescrição
channel_idintegerSimCanal de WhatsApp da empresa (WhatsApp).
contact_idsarray de integerSimDestinatários (1 a 50).
messagestringSem templateTexto da mensagem.
template_idintegerNãoTemplate aprovado (API oficial), com variable_values e button_variable_values.
scheduled_todata ISO 8601SimQuando enviar.

status: pending, processing, completed, partial (parte dos contatos falhou) ou failed. Só agendamentos pending podem ser editados (schedule_not_pending). No PATCH envie só o que muda. Anexos em agendamentos ainda são feitos só pela plataforma; os que já existem são mantidos.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/whatsapp-schedules Agendar WhatsApp

Exemplos de código — agendar whatsapp

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/whatsapp-schedules" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "channel_id": 44,
    "contact_ids": [5120],
    "message": "Olá, {{nome}}! Sua proposta está pronta.",
    "scheduled_to": "2026-11-10T09:00:00-03:00"
  }'
201 Created
{
  "data": {
    "id": 3310,
    "business_id": 8841,
    "pipeline_id": 12,
    "channel_id": 44,
    "message": "Olá, {{nome}}! Sua proposta está pronta.",
    "template_id": null,
    "variable_values": null,
    "button_variable_values": null,
    "scheduled_to": "2026-11-10T09:00:00-03:00",
    "status": "pending",
    "processed_at": null,
    "error_message": null,
    "contacts": [
      {
        "id": 5120,
        "name": "Maria Cliente"
      }
    ],
    "files": [],
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "created_at": "2026-11-04T16:30:00-03:00",
    "updated_at": "2026-11-04T16:30:00-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/whatsapp-schedules Listar agendamentos de WhatsApp

Exemplos de código — listar agendamentos de whatsapp

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/whatsapp-schedules" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 3310,
      "business_id": 8841,
      "pipeline_id": 12,
      "channel_id": 44,
      "message": "Olá, {{nome}}! Sua proposta está pronta.",
      "template_id": null,
      "variable_values": null,
      "button_variable_values": null,
      "scheduled_to": "2026-11-10T09:00:00-03:00",
      "status": "pending",
      "processed_at": null,
      "error_message": null,
      "contacts": [
        {
          "id": 5120,
          "name": "Maria Cliente"
        }
      ],
      "files": [],
      "author": {
        "id": 90,
        "name": "Integração ERP"
      },
      "created_at": "2026-11-04T16:30:00-03:00",
      "updated_at": "2026-11-04T16:30:00-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "last_page": 1
  }
}
PATCH https://api.atys.pro/api/v1/crm/businesses/{id}/whatsapp-schedules/{scheduleId} Editar agendamento de WhatsApp

Exemplos de código — editar agendamento de whatsapp

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841/whatsapp-schedules/3310" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "scheduled_to": "2026-11-11T14:00:00-03:00"
  }'
200 OK
{
  "data": {
    "id": 3310,
    "business_id": 8841,
    "pipeline_id": 12,
    "channel_id": 44,
    "message": "Olá, {{nome}}! Sua proposta está pronta.",
    "template_id": null,
    "variable_values": null,
    "button_variable_values": null,
    "scheduled_to": "2026-11-11T14:00:00-03:00",
    "status": "pending",
    "processed_at": null,
    "error_message": null,
    "contacts": [
      {
        "id": 5120,
        "name": "Maria Cliente"
      }
    ],
    "files": [],
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "created_at": "2026-11-04T16:30:00-03:00",
    "updated_at": "2026-11-04T16:30:00-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/whatsapp-schedules/{scheduleId} Cancelar agendamento de WhatsApp

Exemplos de código — cancelar agendamento de whatsapp

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/whatsapp-schedules/3310" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Agendamentos de e-mail

Agenda um e-mail para contatos do negócio, enviado pelos domínios validados da empresa. O remetente (sender) precisa ser um dos endereços de GET /crm/email-senders.

GET https://api.atys.pro/api/v1/crm/email-senders Remetentes disponíveis

Exemplos de código — remetentes disponíveis

cURL
curl "https://api.atys.pro/api/v1/crm/email-senders" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "email": "vendas@loja.com.br",
      "domain_id": 9
    }
  ]
}
CampoTipoObrigatórioDescrição
sendere-mailSimRemetente (invalid_sender se não for da empresa).
subjectstringSimAssunto; aceita variáveis.
messagestring (HTML)SimCorpo do e-mail; aceita variáveis.
contact_idsarray de integerSimDestinatários (1 a 50). Contato sem e-mail é pulado no envio.
scheduled_todata ISO 8601SimQuando enviar.
reply_toe-mailNãoEndereço de resposta.

status é pending até o envio e sent depois; só pending pode ser editado.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/email-schedules Agendar e-mail

Exemplos de código — agendar e-mail

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/email-schedules" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "sender": "vendas@loja.com.br",
    "reply_to": "carlos@loja.com.br",
    "subject": "Sua proposta, {{nome}}",
    "message": "<p>Segue a proposta combinada.</p>",
    "contact_ids": [5120],
    "scheduled_to": "2026-11-10T09:00:00-03:00"
  }'
201 Created
{
  "data": {
    "id": 912,
    "business_id": 8841,
    "pipeline_id": 12,
    "sender": "vendas@loja.com.br",
    "reply_to": "carlos@loja.com.br",
    "subject": "Sua proposta, {{nome}}",
    "message": "<p>Segue a proposta combinada.</p>",
    "scheduled_to": "2026-11-10T09:00:00-03:00",
    "status": "pending",
    "contacts": [
      {
        "id": 5120,
        "name": "Maria Cliente"
      }
    ],
    "files": [],
    "created_at": "2026-11-04T16:31:00-03:00",
    "updated_at": "2026-11-04T16:31:00-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/email-schedules Listar agendamentos de e-mail

Exemplos de código — listar agendamentos de e-mail

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/email-schedules" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 912,
      "business_id": 8841,
      "pipeline_id": 12,
      "sender": "vendas@loja.com.br",
      "reply_to": "carlos@loja.com.br",
      "subject": "Sua proposta, {{nome}}",
      "message": "<p>Segue a proposta combinada.</p>",
      "scheduled_to": "2026-11-10T09:00:00-03:00",
      "status": "pending",
      "contacts": [
        {
          "id": 5120,
          "name": "Maria Cliente"
        }
      ],
      "files": [],
      "created_at": "2026-11-04T16:31:00-03:00",
      "updated_at": "2026-11-04T16:31:00-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "last_page": 1
  }
}
PATCH https://api.atys.pro/api/v1/crm/businesses/{id}/email-schedules/{scheduleId} Editar agendamento de e-mail

Exemplos de código — editar agendamento de e-mail

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841/email-schedules/912" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Proposta revisada, {{nome}}"
  }'
200 OK
{
  "data": {
    "id": 912,
    "business_id": 8841,
    "pipeline_id": 12,
    "sender": "vendas@loja.com.br",
    "reply_to": "carlos@loja.com.br",
    "subject": "Proposta revisada, {{nome}}",
    "message": "<p>Segue a proposta combinada.</p>",
    "scheduled_to": "2026-11-10T09:00:00-03:00",
    "status": "pending",
    "contacts": [
      {
        "id": 5120,
        "name": "Maria Cliente"
      }
    ],
    "files": [],
    "created_at": "2026-11-04T16:31:00-03:00",
    "updated_at": "2026-11-04T16:31:00-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/email-schedules/{scheduleId} Cancelar agendamento de e-mail

Exemplos de código — cancelar agendamento de e-mail

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/email-schedules/912" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Pastas de documentos

A aba Documentos do negócio: pastas com nome, descrição e arquivos. Os arquivos vão para o armazenamento da empresa (Google Drive, se conectado). Por envio: até 20 arquivos e 50 MB no total; tipos aceitos: PDF, Office/OpenDocument, TXT, CSV, RTF, JPG, PNG, WEBP, HEIC e ZIP. Se um arquivo falhar, nada do envio é gravado (document_rejected).

Criar a pasta aceita JSON (sem arquivos) ou multipart/form-data com name, description e files[]:

POST https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders Criar pasta (com arquivos)

Exemplos de código — criar pasta com arquivos

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -F "name=Contratos" \
  -F "description=Versões assinadas" \
  -F "files[]=@contrato.pdf"
201 Created
{
  "data": {
    "id": 402,
    "business_id": 8841,
    "pipeline_id": 12,
    "name": "Contratos",
    "description": "Versões assinadas",
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "files": [
      {
        "id": 7781,
        "name": "contrato.pdf",
        "size": 182044,
        "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-document-folders-files/402/contrato.pdf",
        "created_at": "2026-11-04T16:40:00-03:00"
      }
    ],
    "created_at": "2026-11-04T16:40:00-03:00",
    "updated_at": "2026-11-04T16:40:00-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders Listar pastas

Exemplos de código — listar pastas

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 402,
      "business_id": 8841,
      "pipeline_id": 12,
      "name": "Contratos",
      "description": "Versões assinadas",
      "author": {
        "id": 90,
        "name": "Integração ERP"
      },
      "files": [
        {
          "id": 7781,
          "name": "contrato.pdf",
          "size": 182044,
          "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-document-folders-files/402/contrato.pdf",
          "created_at": "2026-11-04T16:40:00-03:00"
        }
      ],
      "created_at": "2026-11-04T16:40:00-03:00",
      "updated_at": "2026-11-04T16:40:00-03:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "last_page": 1
  }
}
PATCH https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders/{folderId} Renomear pasta

Exemplos de código — renomear pasta

cURL
curl -X PATCH "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders/402" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Contratos 2026"
  }'
200 OK
{
  "data": {
    "id": 402,
    "business_id": 8841,
    "pipeline_id": 12,
    "name": "Contratos 2026",
    "description": "Versões assinadas",
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "files": [
      {
        "id": 7781,
        "name": "contrato.pdf",
        "size": 182044,
        "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-document-folders-files/402/contrato.pdf",
        "created_at": "2026-11-04T16:40:00-03:00"
      }
    ],
    "created_at": "2026-11-04T16:40:00-03:00",
    "updated_at": "2026-11-04T16:40:00-03:00"
  }
}

Para acrescentar arquivos a uma pasta existente, envie files[] em multipart; a resposta é a pasta com todos os arquivos.

POST https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders/{folderId}/files Adicionar arquivos à pasta

Exemplos de código — adicionar arquivos à pasta

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders/402/files" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -F "files[]=@aditivo.pdf"
200 OK
{
  "data": {
    "id": 402,
    "business_id": 8841,
    "pipeline_id": 12,
    "name": "Contratos",
    "description": "Versões assinadas",
    "author": {
      "id": 90,
      "name": "Integração ERP"
    },
    "files": [
      {
        "id": 7781,
        "name": "contrato.pdf",
        "size": 182044,
        "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-document-folders-files/402/contrato.pdf",
        "created_at": "2026-11-04T16:40:00-03:00"
      },
      {
        "id": 7790,
        "name": "aditivo.pdf",
        "size": 182044,
        "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-document-folders-files/402/contrato.pdf",
        "created_at": "2026-11-04T16:40:00-03:00"
      }
    ],
    "created_at": "2026-11-04T16:40:00-03:00",
    "updated_at": "2026-11-04T16:40:00-03:00"
  }
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders/{folderId}/files/{fileId} Remover arquivo da pasta

Exemplos de código — remover arquivo da pasta

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders/402/files/7781" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/document-folders/{folderId} Excluir pasta e arquivos

Exemplos de código — excluir pasta e arquivos

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/document-folders/402" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Anexos de notas e tarefas

Anexe arquivos a uma nota ou tarefa, um por chamada, no campo file em multipart/form-data. Mesmos tipos e limite das pastas de documentos (invalid_file). Editar a nota ou a tarefa pela API não mexe nos anexos. Notas geradas pela plataforma não recebem anexos (note_locked).

POST https://api.atys.pro/api/v1/crm/businesses/{id}/notes/{noteId}/files Anexar arquivo à nota

Exemplos de código — anexar arquivo à nota

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/notes/5120/files" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -F "file=@proposta.pdf"
201 Created
{
  "data": {
    "id": 655,
    "name": "proposta.pdf",
    "size": 98211,
    "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-observations-files/5120/proposta.pdf",
    "created_at": "2026-11-04T16:45:00-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/notes/{noteId}/files Listar anexos da nota

Exemplos de código — listar anexos da nota

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/notes/5120/files" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 655,
      "name": "proposta.pdf",
      "size": 98211,
      "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-observations-files/5120/proposta.pdf",
      "created_at": "2026-11-04T16:45:00-03:00"
    }
  ]
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/notes/{noteId}/files/{fileId} Remover anexo da nota

Exemplos de código — remover anexo da nota

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/notes/5120/files/655" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Nas tarefas é igual, trocando notes/{noteId} por tasks/{taskId}:

POST https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId}/files Anexar arquivo à tarefa

Exemplos de código — anexar arquivo à tarefa

cURL
curl -X POST "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731/files" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json" \
  -F "file=@contrato.pdf"
201 Created
{
  "data": {
    "id": 702,
    "name": "contrato.pdf",
    "size": 98211,
    "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-tasks-files/731/contrato.pdf",
    "created_at": "2026-11-04T16:45:00-03:00"
  }
}
GET https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId}/files Listar anexos da tarefa

Exemplos de código — listar anexos da tarefa

cURL
curl "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731/files" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "id": 702,
      "name": "contrato.pdf",
      "size": 98211,
      "url": "https://files.atys.pro/storage/files/company-310/crm-businesses-observations-files/5120/proposta.pdf",
      "created_at": "2026-11-04T16:45:00-03:00"
    }
  ]
}
DELETE https://api.atys.pro/api/v1/crm/businesses/{id}/tasks/{taskId}/files/{fileId} Remover anexo da tarefa

Exemplos de código — remover anexo da tarefa

cURL
curl -X DELETE "https://api.atys.pro/api/v1/crm/businesses/8841/tasks/731/files/702" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"

Os números da tela Relatórios do pipeline também estão na API, com o mesmo cálculo. Em vez de um endpoint por gráfico, há um só: você escolhe a métrica pelo nome. Esta chamada lista as métricas que o pipeline aceita, com a descrição e os filtros de cada uma. A chave só vê os pipelines a que o usuário API tem acesso; pipeline de fora volta 404.

GET https://api.atys.pro/api/v1/crm/pipelines/{id}/reports Listar as métricas do pipeline

Exemplos de código — listar as métricas do pipeline

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines/12/reports" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": [
    {
      "metric": "deal-kpi-summary",
      "name": "Resumo de negócios",
      "description": "Quantidade de negócios ganhos, perdidos e em aberto e valor somado das etapas abertas.",
      "filters": [
        "date_from",
        "date_to",
        "user_ids",
        "stage_ids",
        "source_ids",
        "tag_ids",
        "lost_reason_ids",
        "priority_id",
        "scope",
        "archived"
      ]
    },
    {
      "metric": "conversion-rate",
      "name": "Taxa de conversão",
      "description": "Negócios ganhos ÷ negócios do pipeline (decimal: 0.25 = 25%).",
      "filters": [
        "date_from",
        "date_to",
        "user_ids",
        "stage_ids",
        "source_ids",
        "tag_ids",
        "lost_reason_ids",
        "priority_id",
        "scope",
        "archived"
      ]
    },
    {
      "metric": "crm-volume",
      "name": "Volume por etapa",
      "description": "Entradas em cada etapa por dia (ou por hora, se o período tiver até 24 h). Período = data de entrada na etapa.",
      "filters": [
        "date_from",
        "date_to"
      ]
    }
  ],
  "meta": {
    "pipeline_id": 12
  }
}

Consultar uma métrica

Troque {metric} pelo nome da métrica (tabela abaixo). A resposta traz o resultado em data e, em meta, a métrica, o pipeline e os filtros que foram aplicados. O conteúdo de data é o mesmo que a tela usa para desenhar o card ou o gráfico: KPIs vêm como objeto com nomes em camelCase (globalConversion, wonDealCount...); gráficos vêm no formato de séries da tela (por exemplo labels + data, ou categories + series). Taxas de conversion-rate e loss-rate são decimais (0.25 = 25%); as taxas por etapa e por responsável já vêm em porcentagem. Valores em dinheiro usam o campo Valor do negócio, na mesma unidade gravada nele.

GET https://api.atys.pro/api/v1/crm/pipelines/{id}/reports/{metric} Consultar uma métrica

Exemplos de código — consultar uma métrica

cURL
curl "https://api.atys.pro/api/v1/crm/pipelines/12/reports/conversion-rate?date_from=2026-10-01&date_to=2026-10-31&user_ids=77%2C78" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "globalConversion": 0.3125,
    "conversionTarget": 0.25,
    "totalBusinesses": 48,
    "wonBusinesses": 15
  },
  "meta": {
    "metric": "conversion-rate",
    "pipeline_id": 12,
    "filters": {
      "date_from": "2026-10-01",
      "date_to": "2026-10-31",
      "user_ids": [
        77,
        78
      ]
    }
  }
}

Um gráfico, por exemplo negócios por origem, sai assim:

GET /api/v1/crm/pipelines/12/reports/source-distribution — 200 OK
{
    "data": {
        "data": [
            21,
            15,
            12
        ],
        "labels": [
            "Site",
            "WhatsApp",
            "Manual"
        ]
    },
    "meta": {
        "metric": "source-distribution",
        "pipeline_id": 12,
        "filters": {}
    }
}

Filtros

Todos opcionais e combináveis, os mesmos do Filtro avançado da tela de relatórios. Listas aceitam user_ids[]=77&user_ids[]=78 ou user_ids=77,78.

ParâmetroO que faz
date_from, date_toPeríodo, sempre os dois juntos. Data (2026-10-01, dia inteiro) ou data e hora ISO 8601. Na maioria das métricas filtra pela data de criação do negócio; em follow-up é a data do envio e em crm-volume a data de entrada na etapa.
user_idsSó negócios de que algum desses usuários é responsável.
stage_idsSó negócios que estão nessas etapas.
source_idsSó negócios dessas origens (catálogo de origens).
tag_idsSó negócios com pelo menos uma dessas etiquetas.
lost_reason_idsSó negócios perdidos com esses motivos.
priority_idSó negócios dessa prioridade.
scopeall (padrão), won (só negócios na etapa de ganho) ou lost (só na etapa de perda).
archivedtrue calcula sobre os negócios arquivados em vez dos ativos.

Métricas

Em Filtros, "Todos" = a tabela acima inteira; "Período" = só date_from e date_to. Um nome fora desta lista volta 404 com o código unknown_report.

metricO que medeFiltros
deal-kpi-summaryQuantidade de negócios ganhos, perdidos e em aberto e valor somado das etapas abertas.Todos
total-business-countQuantidade de negócios no pipeline.Todos
total-value-of-businessSoma e média do campo "Valor" de todos os negócios do pipeline.Todos
total-value-won-stageSoma e média do valor dos negócios na etapa de ganho.Todos
total-value-lost-stageSoma e média do valor dos negócios na etapa de perda.Todos
conversion-rateNegócios ganhos ÷ negócios do pipeline (decimal: 0.25 = 25%).Todos
loss-rateNegócios perdidos ÷ negócios do pipeline (decimal).Todos
average-ticketValor médio dos negócios ganhos.Todos
velocityTempo médio, em horas, da criação até a venda dos negócios ganhos.Todos
full-cycle-timeTempo médio de ciclo, em horas, dos negócios ganhos e dos perdidos.Todos
business-count-by-stageQuantidade de negócios em cada etapa (funil).Todos
revenue-by-stageValor somado dos negócios em cada etapa.Todos
stage-conversionDos negócios que entraram em cada etapa, quantos avançaram para uma etapa posterior (%).Todos
conversion-heatmapTaxa de avanço por etapa e por semana.Todos
stage-durationMediana (e média) do tempo de permanência em cada etapa aberta.Todos
stage-time-distributionNegócios por faixa de tempo de permanência em cada etapa.Todos
time-to-first-moveTempo entre a criação do negócio e a primeira mudança de etapa.Todos
stalled-dealsNegócios parados numa etapa além do tempo esperado (média + 2 desvios, ou 7 dias).Todos
backward-movement-rateNegócios que voltaram para uma etapa anterior ÷ negócios movimentados; reaberturas à parte.Todos
backward-movement-flowMovimentações para trás por etapa de origem e destino.Todos
source-distributionQuantidade de negócios por origem.Todos
won-source-distributionOrigem dos negócios na etapa de ganho.Todos
lost-source-distributionOrigem dos negócios na etapa de perda.Todos
business-count-by-tagQuantidade de negócios por etiqueta (um negócio conta em cada etiqueta que tem).Todos
value-by-tagValor somado dos negócios por etiqueta.Todos
sales-by-campaignNegócios, ganhos, perdidos e valor por campanha de origem (tráfego pago).Todos
business-count-by-userQuantidade de negócios de cada responsável.Todos
revenue-by-userValor somado dos negócios de cada responsável.Todos
user-conversion-rateGanhos ÷ (ganhos + perdidos) de cada responsável (%).Todos
user-loss-ratePerdidos ÷ (ganhos + perdidos) de cada responsável (%).Todos
stage-user-business-heatmapMapa de calor: quantidade de negócios por etapa (colunas) e responsável (linhas).Todos
follow-upTentativas, respostas e avanços do follow-up do agente de IA. Período = data do envio (padrão: últimos 30 dias).Todos
crm-volumeEntradas em cada etapa por dia (ou por hora, se o período tiver até 24 h). Período = data de entrada na etapa.Período

Os cards da tela que ainda mostram valores de exemplo (CAC/LTV, CPL por canal, satisfação, tendência, cascata e motivos de perda do gráfico) não estão na API. Para os motivos de perda de verdade, filtre com lost_reason_ids ou liste os negócios perdidos em listar negócios.

Indicadores gerais do CRM

Os indicadores de CRM do Painel geral: totais da empresa toda (não de um pipeline). Com período, pipelines_count, businesses_count e a contagem por pipeline usam a data de criação; average_ticket_won e average_cycle_hours_won usam a data da venda e consideram só os pipelines do tipo funil de vendas. Sem período, tudo. Em businesses_by_pipeline aparecem só os pipelines que o usuário API enxerga.

GET https://api.atys.pro/api/v1/crm/reports/summary Indicadores gerais do CRM

Exemplos de código — indicadores gerais do crm

cURL
curl "https://api.atys.pro/api/v1/crm/reports/summary?date_from=2026-10-01&date_to=2026-10-31" \
  -H "Authorization: Bearer atys_live_SUA_CHAVE" \
  -H "Accept: application/json"
200 OK
{
  "data": {
    "pipelines_count": 3,
    "businesses_count": 214,
    "average_ticket_won": 4850.5,
    "average_cycle_hours_won": 196.400000000000005684341886080801486968994140625,
    "businesses_by_pipeline": [
      {
        "pipeline_id": 12,
        "name": "Vendas B2B",
        "businesses_count": 132
      },
      {
        "pipeline_id": 14,
        "name": "Pós-venda",
        "businesses_count": 82
      }
    ]
  },
  "meta": {
    "filters": {
      "date_from": "2026-10-01",
      "date_to": "2026-10-31"
    }
  }
}

Erros

Todo erro da v1 tem o mesmo formato: {"error": {"code", "message", "details"}}. Use o code no seu tratamento; a message é para leitura humana.

422 validation_failed — dados inválidos

Campo obrigatório ausente ou com formato errado. details traz os erros por campo.

{
  "error": {
    "code": "validation_failed",
    "message": "The title field is required.",
    "details": { "title": ["The title field is required."] }
  }
}
422 mandatory_fields_missing / required_tasks_pending

A etapa de destino exige campos ou tarefas que o negócio ainda não tem.

{
  "error": {
    "code": "mandatory_fields_missing",
    "message": "Não é possível mover o negócio para a etapa \"Proposta\". Complete os campos obrigatórios.",
    "details": {
      "stage_name": "Proposta",
      "missing_fields": [ { "id": 55, "name": "Valor" } ]
    }
  }
}
422 unknown_custom_field / invalid_owner / invalid_tag / invalid_assignee

Campo personalizado de outro pipeline, responsável ou dono de tarefa que não é da empresa, ou etiqueta que o usuário API não pode usar.

422 closing_stage_missing / note_locked

Pipeline sem etapa de ganho/perda, ou nota gerada pela plataforma (não editável).

404 not_found

O negócio, pipeline, etapa, nota ou tarefa não existe ou não é visível para a chave.

403 forbidden

A chave não tem a permissão de CRM necessária (por exemplo, excluir sem Excluir negócios do CRM), ou o usuário API não tem acesso ao módulo.

401 unauthenticated

Chave ausente, inválida, revogada ou expirada.

Webhooks

Para ser avisado em vez de consultar, assine os eventos do CRM em Webhooks: crm.business.created, crm.business.updated, crm.business.stage_changed, crm.business.won, crm.business.lost e crm.business.archived. Ações feitas pela API também disparam esses eventos e as automações (workflows) da plataforma — inclusive as que reagem a notas e tarefas.

Recebemos seu contato!

Um especialista da Atys vai falar com você em breve para agendar a demonstração.

Agendar demonstração

Em 20 minutos um especialista mostra a Atys na sua realidade.

BR +55