# Contact2Sale (C2S) API — Documentação de Integração > Referência completa dos endpoints da API de integração da Contact2Sale (C2S CRM). Base URL: `https://api.contact2sale.com/integration`. Autenticação via token no header `Authorization` (ou `Authentication`). Site: https://docs-api-leads.c2sapp.com ## Autenticação Todas as requisições exigem um token gerado dentro do C2S, enviado no header `Authorization: Bearer {token}` (preferencial) ou `Authentication: {token}`. Falha de autenticação retorna `{"error":"not_authorized"}` com status 403. --- # Informações Gerais Retorna informações da empresa autenticada. ## Informações da Empresa `GET https://api.contact2sale.com/integration/me` Retorna informações da empresa autenticada e suas sub-empresas. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Response esperado — 200 ```json { "company_name": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "sub_companies": [ { "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "company_name": "Empresa Exemplo" }, { "company_id": "d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1", "company_name": "Empresa Exemplo - Filial 2" } ] } ``` --- # Leads Endpoints para criação, atualização, encaminhamento, tags, interação e fechamento de leads. ## Listar Leads `GET https://api.contact2sale.com/integration/leads` Lista leads da empresa autenticada com filtros e paginação. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `page` | integer | Não | Número da página | | `perpage` | integer | Não | Itens por página (máximo 50) | | `sort` | string | Não | Campo de ordenação. Aceita created_at, updated_at. Prefixo - para DESC | | `last_update` | string | Não | Filtro por datetime ISO 8601. Retorna leads atualizados desde esta data | | `created_gte` | string | Não | Leads criados a partir desta data (inclusive) | | `created_lt` | string | Não | Leads criados antes desta data | | `updated_gte` | string | Não | Leads atualizados a partir desta data (inclusive) | | `updated_lt` | string | Não | Leads atualizados antes desta data | | `status` | string | Não | Filtrar por status: novo, em_negociacao, convertido, negocio_fechado, arquivado, resgatado, pendente, recusado, finalizado | | `tags` | string | Não | Nomes de tags separados por vírgula | | `phone` | string | Não | Filtrar pelo telefone do cliente | | `email` | string | Não | Filtrar pelo email do cliente | | `first_message` | boolean | Não | Incluir primeira mensagem na resposta | | `custom_attributes` | boolean | Não | Incluir atributos customizados na resposta | | `from_hierarchy_company` | boolean | Não | Se true, inclui no lead o campo from_hierarchy_company com o nome da hierarquia (empresa) que gerou o lead. Retorna null caso a hierarquia que gerou seja a mesma que recebeu o lead, ou caso a empresa não utilize hierarquia. | ### Response esperado — 200 ```json { "data": [ { "type": "lead", "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "internal_id": 12345678, "attributes": { "description": "Apartamento 3 quartos", "observation": "17 de Abril, 10:00 de 2026 - Retornar contato", "is_favorite": false, "product": { "id": "p1r2o3d4u5c6t7i8d9e0x1e2m3p4l5o6", "description": "[101] Apartamento 3 quartos", "prop_ref": "101", "price_float": 350000.00, "price": "350.000,00", "neighbourhood": "Centro", "city": "São Paulo", "real_estate_detail": { "negotiation_name": "Compra" }, "model": null, "brand": null, "year": null, "version": null, "license_plate": null }, "customer": { "id": "c1u2s3t4o5m6e7r8i9d0e1x2e3m4p5l6", "name": "João Silva", "email": "joao.silva@email.com", "phone": "5511999999999", "phone2": null, "phone_global": "+5511999999999" }, "seller": { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Maria Vendedora", "email": "maria@empresa.com", "phone": "5511988888888", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 1, "can_view_bucket": true, "external_id": "", "external_name": null }, "collaborators": [], "created_by": { "id": "c1r2e3a4t5e6d7b8y9i0d1e2x3e4m5p6", "name": "Admin Sistema", "email": "admin@empresa.com", "phone": "5511977777777", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 0, "can_view_bucket": true, "external_id": null, "external_name": null }, "company": { "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "name": "Empresa Exemplo", "language": "pt-BR" }, "lead_source": { "id": 542, "name": "Ação de Rua" }, "channel": { "id": 2, "name": "Showroom" }, "lost_reasons": { "name": null }, "lead_status": { "id": 1, "alias": "under_negotiation", "name": "Em negociação" }, "funnel_status": { "status": "In attendance" }, "done_details": { "done": false, "done_details": null, "done_price": null }, "archive_details": { "archived": false, "archive_notes": null }, "tags": [], "log": [ { "body": "Lead marcado como interagido pelo WhatsApp pelo usuário Admin Sistema", "created_at": "2026-04-16T11:41:53.608-03:00" }, { "body": "Lead criado por Admin Sistema para Maria Vendedora", "created_at": "2026-04-16T11:40:27.227-03:00" } ], "messages": [], "schedulated_actions": [], "created_at": "2026-04-16T11:40:26.000-03:00", "updated_at": "2026-04-16T11:41:52.000-03:00", "external_created_at": null, "from_hierarchy_company": "Imobiliária Matriz SP", "last_activity_date": "2026-04-17T10:00:00.000-03:00", "read_at": "2026-04-16T11:41:52.000-03:00", "replied_at": null, "done_deal_at": null, "url": "", "demo_company": false }, "schedulated_actions": [ { "id": "a1c2t3i4o5n6i7d8e9x0e1m2p3l4o5f6", "seller_id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "seller_name": "Maria Vendedora", "schedulated_action_type_id": 6, "schedulated_action_type_alias": "first_contact", "schedulated_action_name": "Primeiro contato", "schedulated_action_date": "2026-04-16T11:50:26.000-03:00", "description": null, "created_at": "2026-04-16T11:40:26.000-03:00", "status": "Finalizado sem informar" } ], "messages": [ { "id": "m1e2s3s4a5g6e7i8d9e0x1e2m3p4l5o6", "sender_id": "c1r2e3a4t5e6d7b8y9i0d1e2x3e4m5p6", "recipient_id": "c1u2s3t4o5m6e7r8i9d0e1x2e3m4p5l6", "sender_type": "Seller", "recipient_type": "Customer", "body": "Bom dia! Como posso ajudar?", "created_at": "2026-04-16T11:41:52.000-03:00", "updated_at": "2026-04-16T11:41:52.000-03:00", "read_at": "2026-04-16T11:41:52.000-03:00" } ], "facebook_attributes": {} } ], "pagination": { "current_page": 1, "per_page": 50, "total_count": 150, "total_pages": 3 } } ``` ## Buscar Lead por ID `GET https://api.contact2sale.com/integration/leads/:id` Retorna um lead pelo ID criptografado. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | | `from_hierarchy_company` | boolean | Não | Se true, inclui no lead o campo from_hierarchy_company com o nome da hierarquia (empresa) que gerou o lead. Retorna null caso a hierarquia que gerou seja a mesma que recebeu o lead, ou caso a empresa não utilize hierarquia. | ### Response esperado — 200 ```json { "data": { "type": "lead", "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "internal_id": 12345678, "attributes": { "description": "Apartamento 3 quartos", "observation": "17 de Abril, 10:00 de 2026 - Retornar contato", "is_favorite": false, "product": { "id": "p1r2o3d4u5c6t7i8d9e0x1e2m3p4l5o6", "description": "[101] Apartamento 3 quartos", "prop_ref": "101", "price_float": 350000.00, "price": "350.000,00", "neighbourhood": "Centro", "city": "São Paulo", "real_estate_detail": { "negotiation_name": "Compra" }, "model": null, "brand": null, "year": null, "version": null, "license_plate": null }, "customer": { "id": "c1u2s3t4o5m6e7r8i9d0e1x2e3m4p5l6", "name": "João Silva", "email": "joao.silva@email.com", "phone": "5511999999999", "phone2": null, "phone_global": "+5511999999999" }, "seller": { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Maria Vendedora", "email": "maria@empresa.com", "phone": "5511988888888", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 1, "can_view_bucket": true, "external_id": "", "external_name": null }, "collaborators": [], "created_by": { "id": "c1r2e3a4t5e6d7b8y9i0d1e2x3e4m5p6", "name": "Admin Sistema", "email": "admin@empresa.com", "phone": "5511977777777", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 0, "can_view_bucket": true, "external_id": null, "external_name": null }, "company": { "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "name": "Empresa Exemplo", "language": "pt-BR" }, "lead_source": { "id": 542, "name": "Ação de Rua" }, "channel": { "id": 2, "name": "Showroom" }, "lost_reasons": { "name": null }, "lead_status": { "id": 1, "alias": "under_negotiation", "name": "Em negociação" }, "funnel_status": { "status": "In attendance" }, "done_details": { "done": false, "done_details": null, "done_price": null }, "archive_details": { "archived": false, "archive_notes": null }, "tags": [ { "id": "t1a2g3i4d5e6x7e8m9p0l1o2f3o4r5m6", "name": "Quente" } ], "log": [ { "body": "Lead marcado como interagido pelo WhatsApp pelo usuário Admin Sistema", "created_at": "2026-04-16T11:41:53.608-03:00" }, { "body": "Atividade criada | Retornar para o cliente | 17 de Abril, 10:00 de 2026 | Agendar visita", "created_at": "2026-04-16T11:41:10.571-03:00" }, { "body": "Lead criado por Admin Sistema para Maria Vendedora", "created_at": "2026-04-16T11:40:27.227-03:00" } ], "messages": [], "schedulated_actions": [], "created_at": "2026-04-16T11:40:26.000-03:00", "updated_at": "2026-04-16T11:41:52.000-03:00", "external_created_at": null, "from_hierarchy_company": "Imobiliária Matriz SP", "last_activity_date": "2026-04-17T10:00:00.000-03:00", "read_at": "2026-04-16T11:41:52.000-03:00", "replied_at": null, "done_deal_at": null, "url": "", "demo_company": false }, "schedulated_actions": [ { "id": "a1c2t3i4o5n6i7d8e9x0e1m2p3l4o5f6", "seller_id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "seller_name": "Maria Vendedora", "schedulated_action_type_id": 6, "schedulated_action_type_alias": "first_contact", "schedulated_action_name": "Primeiro contato", "schedulated_action_date": "2026-04-16T11:50:26.000-03:00", "description": null, "created_at": "2026-04-16T11:40:26.000-03:00", "status": "Finalizado sem informar" }, { "id": "a2c3t4i5o6n7i8d9e0x1e2m3p4l5o6f7", "seller_id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "seller_name": "Maria Vendedora", "schedulated_action_type_id": 3, "schedulated_action_type_alias": "feedback_customer", "schedulated_action_name": "Retornar para o cliente", "schedulated_action_date": "2026-04-17T10:00:00.000-03:00", "description": "Agendar visita", "created_at": "2026-04-16T11:41:10.000-03:00", "status": "Em aberto" } ], "messages": [ { "id": "m1e2s3s4a5g6e7i8d9e0x1e2m3p4l5o6", "sender_id": "c1r2e3a4t5e6d7b8y9i0d1e2x3e4m5p6", "recipient_id": "c1u2s3t4o5m6e7r8i9d0e1x2e3m4p5l6", "sender_type": "Seller", "recipient_type": "Customer", "body": "Bom dia! Como posso ajudar?", "created_at": "2026-04-16T11:41:52.000-03:00", "updated_at": "2026-04-16T11:41:52.000-03:00", "read_at": "2026-04-16T11:41:52.000-03:00" } ], "facebook_attributes": {} } } ``` ## Criar Lead `POST https://api.contact2sale.com/integration/leads` Cria um novo lead. É obrigatório enviar ao menos phone ou email (caso contrário retorna 423). ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `name` | string | Não | Nome do cliente. Default: "Não identificado". | | `email` | string | Não | Email do cliente. Utilizado para deduplicação. Remove "." antes do @ automaticamente. | | `phone` | string | Não | Telefone principal. Se vazio, usa "customer_number" como fallback. | | `phone2` | string | Não | Telefone secundário (opcional). | | `description` | string | Não | Descrição principal do item, exibida no card do lead. Máximo: 250 caracteres. | | `prop_ref` | string | Não | Código do imóvel. Obrigatório para empresas do tipo IMOBILIÁRIA. Valores especiais: "Sem código", "Não localizado", "Nenhum", "ignore". | | `brand` | string | Não | Marca do veículo. Apenas empresas de CARROS ou MOTOS. | | `model` | string | Não | Modelo do veículo. Apenas empresas de CARROS ou MOTOS. | | `version` | string | Não | Versão do veículo. Apenas empresas de CARROS ou MOTOS. | | `year` | integer | Não | Ano do veículo. Se igual ao ano atual, pode virar "Novo". | | `price` | string | Não | Valor do produto/imóvel/veículo. Aceita "R$ 250.000,00", "250000" ou "250000.00". | | `color` | string | Não | Cor do veículo. Apenas empresas de CARROS ou MOTOS. | | `km` | integer | Não | Quilometragem. Se 0 força vehicle_type = "Novo". Apenas empresas de CARROS ou MOTOS. | | `license_plate` | string | Não | Placa do veículo. Removida automaticamente da descrição. Apenas empresas de CARROS ou MOTOS. | | `type_negotiation_string` | string | Não | Texto livre da negociação. Faz parser automático de palavras-chave. Evite usar junto com "type_negotiation". | | `type_negotiation` | string | Não | Tipo de negociação. Apenas IMOBILIÁRIAS. Exemplos: "Comprar", "Alugar", "Lançamento". | | `vehicle_type` | string | Não | Tipo do veículo. Valores comuns: "Novo", "Usado". Apenas empresas de CARROS ou MOTOS. | | `city` | string | Não | Cidade do imóvel. Utilizada na distribuição. | | `neighbourhood` | string | Não | Bairro do imóvel. Utilizado na distribuição. | | `channel_id` | integer | Não | ID do canal. Valores possíveis: [1,2,3,4,5]. Default: 1 (Internet). | | `channel_abbrev` | string | Não | Abreviação do canal. Exemplos: "internet", "whatsapp", "telefone", "showroom". | | `url` | string | Não | URL do anúncio/origem. Se vazio e existir prop_ref + custom_link, a URL pode ser gerada automaticamente. | | `sourcerUrl` | string | Não | Campo legado de URL. Alguns parceiros ainda enviam aqui. | | `body` | string | Não | Primeira mensagem do lead. Máximo: 15.000 caracteres. Aceita HTML. | | `observation` | string | Não | Observação interna. | | `external_id` | string | Não | ID externo do parceiro. Pode ser usado em distribuições específicas. | | `custom_created_at` | string | Não | Sobrescreve o created_at do lead. Timezone da empresa é respeitada. Formato ISO 8601. | | `pending` | boolean | Não | Define lead como pendente (status = 5). | | `closed` | boolean | Não | Define lead como fechado (status = 7). Já marca como lido. | | `already_interacted` | boolean | Não | Marca o lead como já interagido/lido. | | `skip_on_interaction` | boolean | Não | Impede marcação automática de interação. | | `source` | string | Não | Origem do lead. Normalmente lowercase + underscore. Exemplo: "google_ads", "olx". | | `real_state_keywords` | string | Não | Keywords para distribuição personalizada. Apenas IMOBILIÁRIAS. | | `tags` | array | Não | Lista de tags. Aceita array ou string única. | | `tag_name` | string | Não | Tag individual. Faz merge automático com "tags". | | `wpp_username` | string | Não | Username/número do WhatsApp. | | `bsuid` | string | Não | Business Account UID do WhatsApp. | ### Body ```json { "data": { "type": "lead", "attributes": { // ============================================================ // IDENTIFICAÇÃO DO CLIENTE (Customer) // ============================================================ // Nome do cliente. // Default: "Não identificado" "name": "Pedro Silva", // Email do cliente. // Utilizado para deduplicação. // Remove "." antes do @ automaticamente. "email": "pedro@teste.com", // Telefone principal. // Se vazio, usa "customer_number" como fallback. "phone": "+55 11 99999-9999", // Telefone secundário (opcional). "phone2": "+55 11 99999-9999", // ============================================================ // PRODUTO / IMÓVEL / VEÍCULO (Product) // ============================================================ // Descrição principal do item. // Exibida no card do lead. // Máximo: 250 caracteres. "description": "Apartamento 2 quartos no Botafogo", // Código do imóvel. // Obrigatório para empresas do tipo IMOBILIÁRIA. // Valores especiais: // "Sem código", "Não localizado", "Nenhum", "ignore" "prop_ref": "AP12345", // Marca do veículo. // Apenas empresas de CARROS ou MOTOS. "brand": "Volkswagen", // Modelo do veículo. // Apenas empresas de CARROS ou MOTOS. "model": "Polo", // Versão do veículo. // Apenas empresas de CARROS ou MOTOS. "version": "Comfortline 1.6", // Ano do veículo. // Se igual ao ano atual, pode virar "Novo". "year": 2024, // Valor do produto/imóvel/veículo. // Aceita: // "R$ 250.000,00" // "250000" // "250000.00" "price": "R$ 250.000,00", // Cor do veículo. // Apenas empresas de CARROS ou MOTOS. "color": "Prata", // Quilometragem. // Se 0 => força vehicle_type = "Novo" // Apenas empresas de CARROS ou MOTOS. "km": 35000, // Placa do veículo. // Removida automaticamente da descrição. // Apenas empresas de CARROS ou MOTOS. "license_plate": "ABC1D23", // Texto livre da negociação. // Faz parser automático de palavras-chave. // Evite usar junto com "type_negotiation". "type_negotiation_string": "Apartamento para Aluguel por R$ 1.200,00", // Tipo de negociação. // Apenas IMOBILIÁRIAS. // Exemplos: // "Comprar" // "Alugar" // "Lançamento" "type_negotiation": "Comprar", // Tipo do veículo. // Valores comuns: // "Novo" // "Usado" // Apenas empresas de CARROS ou MOTOS. "vehicle_type": "Usado", // Cidade do imóvel. // Utilizada na distribuição. "city": "Campinas", // Bairro do imóvel. // Utilizado na distribuição. "neighbourhood": "Botafogo", // ============================================================ // LEAD // ============================================================ // ID do canal. // Valores possíveis: // [1,2,3,4,5] // Default: 1 (Internet) "channel_id": 1, // Abreviação do canal. // Exemplos: // "internet" // "whatsapp" // "telefone" // "showroom" "channel_abbrev": "internet", // URL do anúncio/origem. // Se vazio e existir prop_ref + custom_link, // a URL pode ser gerada automaticamente. "url": "https://exemplo.com.br/imovel/12345", // Campo legado de URL. // Alguns parceiros ainda enviam aqui. "sourcerUrl": "https://exemplo.com.br/imovel/12345", // Primeira mensagem do lead. // Máximo: 15.000 caracteres. // Aceita HTML. "body": "Olá, tenho interesse no imóvel.", // Observação interna. "observation": "Cliente VIP, retornar com prioridade", // ID externo do parceiro. // Pode ser usado em distribuições específicas. "external_id": "EXT-99887", // Sobrescreve o created_at do lead. // Timezone da empresa é respeitada. "custom_created_at": "2026-05-08T14:30:00", // ============================================================ // ORIGEM / DISTRIBUIÇÃO // ============================================================ // Estado do lead. // true => pendente (distribuível) // false => já distribuído ou fechado "pending": true, // Lead já fechado. "closed": false, // Já houve interação com o lead. "already_interacted": false, // Pular na distribuição se já interagido. "skip_on_interaction": false, // Fonte primária da origem. // Exemplos: // "portal_zap" // "facebook" // "google_ads" "source": "portal_zap", // Palavras-chave para imobiliárias. // Exemplos: // "aluguel" // "venda" // "lançamento" "real_state_keywords": ["aluguel", "venda"], // IDs das tags do lead. // Exemplo: ["tag-uuid-1", "tag-uuid-2"] "tags": ["tag-uuid-1"], // Nome da tag (usado em integrações legadas). // Exemplo: "imoveis", "premium" "tag_name": "imoveis", // ============================================================ // WHATSAPP / EXTRAS // ============================================================ // Username/número do WhatsApp. "wpp_username": "5511903873417", // Business Account UID do WhatsApp. "bsuid": "1234567890" } } } ``` ### Response esperado — 200 ```json { "success": true, "lead_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "received_by": { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Maria Vendedora", "email": "maria@empresa.com", "phone": "5511988888888" }, "company": "Empresa Exemplo", "info": { "name": "João Silva", "email": "joao.silva@email.com", "phone": "5511999999999", "channel_id": 1, "lead_source_id": 1, "message": "Interesse no imóvel X" } } ``` ## Atualizar Lead `PUT https://api.contact2sale.com/integration/leads/:id` Atualiza um lead existente. O :id é o ID criptografado do lead. Suporta 3 formatos de body: via data.attributes (legado), reset de created_at, ou atualização completa (cliente + produto + mensagem). ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "lead": { "channel_id": 1, "lead_source_id": 2, "url": "https://...", "customer": { "name": "Nome Atualizado", "email": "novo@email.com", "phone": "11999999999", "phone2": "11888888888", "city": "São Paulo" }, "product": { "brand": "Toyota", "model": "Corolla", "year": "2024", "color": "Branco", "km": "0", "price": "150000", "description": "...", "prop_ref": "REF123" }, "type_negotiation": 0, "body": "Mensagem opcional a anexar ao lead" } } ``` ### Response esperado — 200 ```json { "success": true, "lead": { "customer_id": 12345678, "product_id": 87654321, "description": "Apartamento 3 quartos", "updated_at": "2026-04-16T12:53:09.000-03:00", "company_id": 2776, "id": 12345678, "lead_source_id": 349, "channel_id": 1, "seller_id": 11111, "read_at": null, "is_favorite": false, "status": 0, "created_at": "2026-04-16T12:52:52.000-03:00", "is_rescued": false, "activity_date": "2026-04-16T13:02:52.000-03:00", "replied_at": null, "num_unread_msg_to_seller": 0, "messages": [], "related_leads": [], "lead_status": { "id": 0, "name": "Novo", "alias": "new", "color_hex": "#0000FF", "sort": 0, "restrict_change": false, "manual_change": true }, "seller": { "id": 11111, "name": "Maria Vendedora", "company_id": 2776, "company_name": "Empresa Exemplo", "username": "mariavendedora", "email": "maria@empresa.com" }, "product": { "id": 87654321, "description": "Apartamento 3 quartos", "prop_ref": "101", "brand": null, "model": null, "version": null, "year": null, "price": "350.000,00", "type_negotiation_string": "Compra" }, "customer": { "id": 12345678, "name": "João Silva", "email": "joao.silva@email.com", "phone": "11999999999", "phone2": null, "phone_formatted": "(11) 99999-9999", "whatsapp_number": "5511999999999" }, "company_name": "Empresa Exemplo", "source_name": "API / Internet", "channel_name": "Internet" } } ``` ## Encaminhar Lead `PATCH https://api.contact2sale.com/integration/leads/:id/forward` Encaminha um lead para outro vendedor. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "seller_from_id": "", "seller_to_id": "" } ``` ### Response esperado — 200 ```json { "success": true, "lead": { "seller_id": 22222, "company_id": 2776, "id": 12345678, "lead_source_id": 349, "channel_id": 1, "read_at": "2026-04-16T12:53:23.000-03:00", "is_favorite": false, "status": 1, "description": "Apartamento 3 quartos", "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:30.000-03:00", "activity_date": "2026-04-20T11:00:00.000-03:00", "replied_at": null, "num_unread_msg_to_seller": 0 } } ``` ## Listar Tags do Lead `GET https://api.contact2sale.com/integration/leads/:id/tags` Retorna todas as tags de um lead. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Response esperado — 200 ```json { "success": true, "tags": [ { "id": "t1a2g3i4d5e6x7e8m9p0l1o2f3o4r5m6", "name": "Quente" }, { "id": "t2a3g4i5d6e7x8e9m0p1l2o3f4o5r6m7", "name": "Investidor" } ] } ``` ## Adicionar Tag ao Lead `POST https://api.contact2sale.com/integration/leads/:id/create_tag` Adiciona uma tag a um lead. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "tag_id": "" } ``` ### Response esperado — 200 ```json { "success": true, "tags": [ { "id": 5646064, "lead_id": 12345678, "created_at": "2026-04-16T12:53:13.000-03:00", "updated_at": "2026-04-16T12:53:13.000-03:00", "tag_id": 48437, "created_by_seller_id": null } ] } ``` ## Remover Tag do Lead `POST https://api.contact2sale.com/integration/leads/:id/remove_tag` Remove uma ou mais tags de um lead. Aceita tag_id como string (única) ou array (múltiplas). ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "tag_id": "" } ``` ### Response esperado — 200 ```json { "success": true, "tags": [] } ``` ## Marcar Lead como Lido `POST https://api.contact2sale.com/integration/leads/:id/mark_as_interacted` Marca um lead como lido/interagido. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Response esperado — 200 ```json { "success": true, "lead": { "num_unread_msg_to_seller": 0, "read_at": "2026-04-16T12:53:23.000-03:00", "id": 12345678, "status": 0, "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:23.000-03:00" } } ``` ## Criar Mensagem no Lead `POST https://api.contact2sale.com/integration/leads/:id/create_message` Cria uma mensagem em um lead. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "body": "Texto da mensagem", "from": "bot", "url": "https://...", "external_id": "msg-ext-123", "created_at": "2025-01-15T10:00:00Z", "origin": "whatsapp", "message_type": "text", "sender_name": "João", "parent_message_id": "msg-parent-456", "tags": [ "", "" ] } ``` ### Response esperado — 201 ```json { "data": { "type": "lead", "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "internal_id": 12345678, "attributes": { "description": "Apartamento 3 quartos", "lead_status": { "id": 0, "alias": "new", "name": "Novo" }, "messages": [], "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:25.000-03:00" }, "messages": [ { "id": "m1e2s3s4a5g6e7i8d9e0x1e2m3p4l5o6", "sender_id": "s1e2n3d4e5r6i7d8e9x0e1m2p3l4o5f6", "recipient_id": "r1e2c3i4p5i6e7n8t9i0d1e2x3e4m5p6", "sender_type": "SysUser", "recipient_type": "Customer", "body": "Mensagem enviada via API", "created_at": "2026-04-16T12:53:25.000-03:00", "updated_at": "2026-04-16T12:53:25.000-03:00", "read_at": null } ] } } ``` ## Criar Atividade no Lead `POST https://api.contact2sale.com/integration/leads/:id/create_activity` Cria uma atividade em um lead. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "date": "2025-01-20T14:00:00Z", "type": { "activity": true }, "body": "Descrição da atividade", "send_push": true, "title": "Título da notificação" } ``` ### Response esperado — 201 ```json { "data": { "type": "lead", "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "internal_id": 12345678, "attributes": { "description": "Apartamento 3 quartos", "lead_status": { "id": 1, "alias": "under_negotiation", "name": "Em negociação" }, "log": [ { "body": "Atividade criada | Retornar para o cliente | 20 de Abril, 14:00 de 2026 | Agendar visita ao imóvel", "created_at": "2026-04-16T12:53:28.101-03:00" } ], "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:28.000-03:00", "last_activity_date": "2026-04-20T14:00:00.000-03:00" }, "schedulated_actions": [ { "id": "a1c2t3i4o5n6i7d8e9x0e1m2p3l4o5f6", "seller_id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "seller_name": "Maria Vendedora", "schedulated_action_type_id": 3, "schedulated_action_type_alias": "feedback_customer", "schedulated_action_name": "Retornar para o cliente", "schedulated_action_date": "2026-04-20T14:00:00.000-03:00", "description": "Agendar visita ao imóvel", "created_at": "2026-04-16T12:53:27.000-03:00", "status": "Em aberto" } ] } } ``` ## Atualizar Status do Lead `POST https://api.contact2sale.com/integration/leads/:id/update_status` Atualiza o status de um lead. Quando status = 3, o lead é marcado como perdido. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "status": 3, "message": "Cliente não tem interesse", "lost_reason_ids": [ 12 ] } ``` ### Response esperado — 201 ```json { "data": { "type": "lead", "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "internal_id": 12345678, "attributes": { "description": "Apartamento 3 quartos", "lead_status": { "id": 3, "alias": "lost", "name": "Arquivado" }, "archive_details": { "archived": true, "archive_notes": "Cliente não tem interesse" }, "lost_reasons": { "name": "inactive" }, "log": [ { "body": "O status foi alterado para Arquivado por Integração. | Detalhes: Cliente não tem interesse", "created_at": "2026-04-16T12:53:32.000-03:00" } ], "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:32.000-03:00" } } } ``` ## Fechar Negócio do Lead `POST https://api.contact2sale.com/integration/leads/:id/done_deal` Registra o fechamento de negócio de um lead. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do lead | ### Body ```json { "prop_ref": "PROP-123", "done_type_negotiation": "sale", "info": "Detalhes do negócio", "date": "2025-01-15", "value": "500000" } ``` ### Response esperado — 200 ```json { "success": true, "tags": { "id": 80123751, "done_deal_at": null, "lead_id": 12345678, "created_at": "2026-04-16T12:52:52.000-03:00", "updated_at": "2026-04-16T12:53:32.000-03:00", "done_details": null, "received_by_seller_id": 11111, "done_extra_vehicle": null, "done_extra_immobile": null, "done_price": null, "done_type_negotiation": null, "archieve_details": "Detalhes do arquivamento" } } ``` --- # Usuários Endpoints para gerenciamento de vendedores. ## Listar Vendedores `GET https://api.contact2sale.com/integration/sellers` Lista todos os vendedores da empresa autenticada (incluindo empresas do grupo). ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Response esperado — 200 ```json [ { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Maria Vendedora", "email": "maria@empresa.com", "phone": "5511988888888", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 1, "can_view_bucket": true, "external_id": "", "external_name": "", "is_master": true }, { "id": "s2e3l4l5e6r7i8d9e0x1e2m3p4l5o6f7", "name": "Carlos Corretor", "email": "carlos@empresa.com", "phone": "5511977777777", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 0, "can_view_bucket": true, "external_id": null, "external_name": null, "is_master": false }, { "id": "s3e4l5l6e7r8i9d0e1x2e3m4p5l6o7f8", "name": "Ana Gestora", "email": "ana@empresa.com", "phone": "5511966666666", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 4, "can_view_bucket": true, "external_id": "12345", "external_name": "Nome Externo", "is_master": false } ] ``` ## Criar Vendedor `POST https://api.contact2sale.com/integration/sellers` Cria um novo vendedor. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "company_id": "", "name": "Novo Vendedor", "username": "novovendedor", "email": "vendedor@exemplo.com", "phone1": "11999999999", "is_recipient": true, "is_rescue": false, "is_master": false, "can_access_users": false, "show_in_metrics": true, "external_id": "EXT-001", "own_captations_aux": [ 0, 1 ], "team": [ 0, 1, 2 ] } ``` ### Response esperado — 201 ```json { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Novo Vendedor", "email": "vendedor@empresa.com", "phone": "5511999999999", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 1, "can_view_bucket": true, "external_id": "EXT-001", "external_name": null, "is_master": false } ``` ## Atualizar Vendedor `PUT https://api.contact2sale.com/integration/sellers/:id` Atualiza um vendedor existente. O :id é o ID criptografado do vendedor. Aceita os mesmos campos do POST além de recipient_rotation, recipient_distribution, recipient_memory e can_view_bucket. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | string | Sim | ID criptografado do vendedor | ### Body ```json { "name": "Vendedor Atualizado", "email": "vendedor.novo@empresa.com", "is_recipient": true, "can_view_bucket": true } ``` ### Response esperado — 200 ```json { "id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "name": "Maria Vendedora Atualizada", "email": "maria.nova@empresa.com", "phone": "5511988888888", "company": "Empresa Exemplo", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "is_recipient": 1, "can_view_bucket": true, "external_id": "", "external_name": "", "is_master": true } ``` ## Batch Update Timeshift `PUT https://api.contact2sale.com/integration/sellers/batch_update_timeshift` Atualiza em lote a configuração de timeshift de múltiplos vendedores. Os vendedores são processados em ordem reversa e o last_lead_received_at é escalonado em 1 segundo para estabelecer ordem de prioridade. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "seller_ids": [ "", "" ], "recipient_rotation": "...", "recipient_distribution": "...", "recipient_memory": "..." } ``` ### Response esperado — 200 ```json { "success": true } ``` --- # Empresas Endpoints para listar empresas do grupo (filiais). ## Listar Empresas `GET https://api.contact2sale.com/integration/companies` Lista todas as empresas do grupo (filiais) da empresa autenticada. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Response esperado — 200 ```json [ { "id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "name": "Empresa Exemplo" }, { "id": "d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1", "name": "Empresa Exemplo - Filial 2" }, { "id": "e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2", "name": "Empresa Exemplo - Filial 3" } ] ``` --- # Tags Endpoints para gerenciamento de tags. ## Listar Tags `GET https://api.contact2sale.com/integration/tags` Lista as tags da empresa autenticada. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `name` | string | Não | Filtrar pelo nome exato da tag | | `autofill` | boolean | Não | Filtrar pela flag de autofill | ### Response esperado — 200 ```json { "data": [ { "id": "t1a2g3i4d5e6x7e8m9p0l1o2f3o4r5m6", "type": "tag", "attributes": { "id": "t1a2g3i4d5e6x7e8m9p0l1o2f3o4r5m6", "name": "Quente", "enabled": true, "autofill": false, "instructions": null } }, { "id": "t2a3g4i5d6e7x8e9m0p1l2o3f4o5r6m7", "type": "tag", "attributes": { "id": "t2a3g4i5d6e7x8e9m0p1l2o3f4o5r6m7", "name": "Frio", "enabled": true, "autofill": false, "instructions": null } }, { "id": "t3a4g5i6d7e8x9e0m1p2l3o4f5o6r7m8", "type": "tag", "attributes": { "id": "t3a4g5i6d7e8x9e0m1p2l3o4f5o6r7m8", "name": "Investidor", "enabled": true, "autofill": true, "instructions": "Aplicar quando o cliente demonstrar interesse em investimento" } }, { "id": "t4a5g6i7d8e9x0e1m2p3l4o5f6o7r8m9", "type": "tag", "attributes": { "id": "t4a5g6i7d8e9x0e1m2p3l4o5f6o7r8m9", "name": "Financiamento", "enabled": true, "autofill": false, "instructions": null } } ] } ``` ## Criar Tag `POST https://api.contact2sale.com/integration/tags` Cria uma nova tag. Se uma tag com os mesmos parâmetros já existir, retorna a tag existente com status 201 e uma chave errors. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "tag": { "name": "Nova Tag", "autofill": false, "instructions": "Instruções para IA de autofill" } } ``` ### Response esperado — 201 ```json { "tag": { "id": "t1a2g3i4d5e6x7e8m9p0l1o2f3o4r5m6", "name": "Nova Tag", "enabled": true, "company_id": 2776, "created_by_seller_id": 12345, "edited_by_seller_id": null, "created_at": "2026-04-16T12:00:00.000-03:00", "updated_at": "2026-04-16T12:00:00.000-03:00", "autofill": false, "instructions": null } } ``` --- # Regras de Distribuição Endpoints para gerenciamento de regras de distribuição (regiões). ## Listar Regras de Distribuição `GET https://api.contact2sale.com/integration/distribution_rules` Lista todas as regras de distribuição (regiões) da empresa e suas filiais. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Response esperado — 200 ```json [ { "cod_1": "ABC123", "cod_2": "Empreendimento Centro", "cod_3": "", "priority": 1, "type_rule": "distribution", "seller_id": "s1e2l3l4e5r6i7d8e9x0e1m2p3l4o5f6", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" }, { "cod_1": "DEF456", "cod_2": "Empreendimento Sul", "cod_3": "Compra", "priority": 1, "type_rule": "distribution", "seller_id": "s2e3l4l5e6r7i8d9e0x1e2m3p4l5o6f7", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" }, { "cod_1": null, "cod_2": null, "cod_3": "Compra", "priority": 1, "type_rule": "rotation", "seller_id": "s3e4l5l6e7r8i9d0e1x2e3m4p5l6o7f8", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" }, { "cod_1": null, "cod_2": null, "cod_3": "Aluguel", "priority": 1, "type_rule": "rotation", "seller_id": "s3e4l5l6e7r8i9d0e1x2e3m4p5l6o7f8", "company_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" } ] ``` ## Criar Regra de Distribuição `POST https://api.contact2sale.com/integration/distribution_rules` Cria uma nova regra de distribuição. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "cod_1": "SP", "cod_2": "São Paulo", "cod_3": "Centro", "priority": 1, "type_rule": "rotation", "seller_id": "", "company_id": "" } ``` ### Response esperado — 201 ```json { "message": "Distribution rule created successfully" } ``` --- # Filas de Distribuição Endpoints para gerenciamento de filas de distribuição. ## Listar Filas de Distribuição `GET https://api.contact2sale.com/integration/distribution_queues/list_queues` Lista as filas de distribuição da empresa pai. Retorna headers de paginação: Total-pages, Total-entries, Current-page. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `page` | integer | Não | Número da página | | `per_page` | integer | Não | Itens por página | ### Response esperado — 200 ```json { "success": true, "distribution_queues": [ { "id": 12345, "name": "Fila Principal", "priority": 10, "status": "enabled", "queue_type": "custom_queue", "leads_count": 0, "redistributable_leads_count": null, "redistributable": false, "check_in": false, "check_in_qr_code": false, "group_memory_lead": false, "receptionist_enabled": false, "today_working_time": { "begin": "08:00", "end": "18:00", "enable": true }, "sales_stand_form_id": null, "advanced_queue_edit": false, "rules": [ { "field": "type_negotiation", "operator": "equal", "value": "Compra" } ], "next_seller_index": 1, "next_seller": { "id": 67890, "seller_id": 11111, "seller_name": "Maria Vendedora", "company_id": 2776, "company_name": "Empresa Exemplo", "priority": 1, "status": "enabled", "repeated_on_queue": false, "count_on_queue": 1, "first_check_in_at": null, "last_check_out_at": null, "checked_in_after_shuffle": false, "own_hierarchy_name": "Empresa Exemplo", "closest_parent_hierarchy_name": null, "level_one_parent_hierarchy_name": null }, "distribution_sellers_quantity": 3 }, { "id": 12346, "name": "Fila Check-in", "priority": 9, "status": "enabled", "queue_type": "custom_queue", "leads_count": 0, "redistributable_leads_count": null, "redistributable": false, "check_in": true, "check_in_qr_code": true, "group_memory_lead": false, "receptionist_enabled": false, "today_working_time": { "begin": "00:00", "end": "23:59", "enable": true }, "sales_stand_form_id": null, "advanced_queue_edit": false, "rules": [], "next_seller_index": 0, "next_seller": {}, "distribution_sellers_quantity": 0 } ] } ``` ## Listar Vendedores da Fila `GET https://api.contact2sale.com/integration/distribution_queues/:id/sellers` Lista os vendedores de uma fila de distribuição. Inclui headers de paginação. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | integer | Sim | ID da fila de distribuição | | `page` | integer | Não | Número da página | | `per_page` | integer | Não | Itens por página | ### Response esperado — 200 ```json { "success": true, "distribution_queue_sellers": [ { "id": 67890, "seller_id": 11111, "seller_name": "Maria Vendedora", "company_id": 2776, "company_name": "Empresa Exemplo", "priority": 1, "status": "enabled", "repeated_on_queue": false, "count_on_queue": 1, "first_check_in_at": null, "last_check_out_at": null, "checked_in_after_shuffle": false, "own_hierarchy_name": "Empresa Exemplo", "closest_parent_hierarchy_name": null, "level_one_parent_hierarchy_name": null }, { "id": 67891, "seller_id": 22222, "seller_name": "Carlos Corretor", "company_id": 2776, "company_name": "Empresa Exemplo", "priority": 2, "status": "enabled", "repeated_on_queue": false, "count_on_queue": 1, "first_check_in_at": null, "last_check_out_at": null, "checked_in_after_shuffle": false, "own_hierarchy_name": "Empresa Exemplo", "closest_parent_hierarchy_name": null, "level_one_parent_hierarchy_name": null } ] } ``` ## Atualizar Prioridades dos Vendedores `POST https://api.contact2sale.com/integration/distribution_queues/:id/sellers_priorities` Atualiza as prioridades dos vendedores dentro de uma fila de distribuição. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | integer | Sim | ID da fila de distribuição | ### Body ```json { "...": "Configuração de prioridades dos vendedores" } ``` ### Response esperado — 200 ```json { "success": true, "distribution_queue_sellers": [ { "id": 67890, "seller_id": 11111, "seller_name": "Maria Vendedora", "priority": 1, "status": "enabled" }, { "id": 67891, "seller_id": 22222, "seller_name": "Carlos Corretor", "priority": 2, "status": "enabled" } ] } ``` ## Redistribuir Lead `POST https://api.contact2sale.com/integration/distribution_queues/:id/redistribute_lead` Redistribui um lead pela fila de distribuição. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | integer | Sim | ID da fila de distribuição | ### Body ```json { "id": "" } ``` ### Response esperado — 200 ```json { "success": true, "lead_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "new_seller": { "id": 22222, "name": "Carlos Corretor", "company_name": "Empresa Exemplo" } } ``` ## Definir Próximo Vendedor `POST https://api.contact2sale.com/integration/distribution_queues/:id/next_seller` Define o próximo vendedor na rotação da fila de distribuição. O vendedor deve estar habilitado na fila. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `id` | integer | Sim | ID da fila de distribuição | ### Body ```json { "next_queue_seller_id": 123 } ``` ### Response esperado — 200 ```json { "next_seller": { "id": 67890, "distribution_queue_id": 12345, "seller_id": 11111, "priority": 1, "last_lead_received_at": null, "status": "enabled", "created_at": "2026-04-15T15:03:40.000-03:00", "updated_at": "2026-04-15T15:03:40.000-03:00", "lead_skipped_at": null } } ``` --- # Webhooks Endpoints para gerenciamento de **webhooks**, que permitem receber automaticamente as informações dos leads em tempo real através de gatilhos configuráveis. Com os webhooks, seu sistema será notificado sempre que um lead for criado, atualizado ou encerrado — sem necessidade de consultar a API periodicamente. ## Assinar Webhook `POST https://api.contact2sale.com/integration/api/subscribe` Assina eventos de webhook para leads. Ações disponíveis: **on_create_lead**, **on_update_lead**, **on_close_lead**. **Gatilhos disponíveis:** - **on_create_lead** — Envia as informações do lead no momento em que ele é criado. - **on_update_lead** — Envia as informações do lead quando é gerado um log de alteração dentro dele. - **on_close_lead** — Envia as informações do lead quando ele é arquivado ou o negócio é fechado com o cliente. ⚠️ **Importante:** Só é possível cadastrar **1 endpoint por token** utilizado. Caso um segundo endpoint seja cadastrado, o primeiro será **automaticamente apagado**. É possível utilizar os **3 gatilhos em um mesmo endpoint** — basta enviar uma requisição de assinatura para cada ação desejada. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "hook_action": "on_create_lead", "hook_url": "https://seu-servidor.com/webhook" } ``` ### Response esperado — 200 ```json { "success": true, "message": "Subscribed successfully" } ``` ## Cancelar Webhook `POST https://api.contact2sale.com/integration/api/unsubscribe` Cancela a assinatura de eventos de webhook. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer {token}` | Token de autenticação (preferencial) | | `Authentication` | `{token}` | Header alternativo para o mesmo token | | `Content-Type` | `application/json` | | ### Body ```json { "hook_action": "on_create_lead" } ``` ### Response esperado — 200 ```json { "success": true, "message": "Unsubscribed successfully" } ``` --- # Stand de Vendas Endpoints para acesso a dados do módulo de Estande de Vendas. ⚠️ Esses endpoints só funcionam caso a função de Stand de Vendas esteja ativa na sua conta. **Fluxo recomendado:** 1. `GET /stands` → descobre os IDs de estandes e formulários 2. `GET /leads` → lista leads filtrando por `custom_lead_form_id` (do passo 1) 3. `GET /attendance_summaries` → lista presenças filtrando por `sales_stand_id` (do passo 1) ⚠️ Todos os IDs retornados pela API são criptografados e devem ser enviados como recebidos nos parâmetros de filtro. Nunca use IDs numéricos diretos. ## Listar Estandes `GET https://api.contact2sale.com/integration/integration/sales_stand/stands` Lista os estandes de vendas (filas de distribuição com regra de estande) acessíveis pela hierarquia da empresa autenticada, com o formulário de atendimento associado a cada um. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer ` | Token de autenticação gerado no C2S | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `company_ids[]` | array de strings | Não | Filtra por empresas específicas da hierarquia. Se omitido, retorna estandes de toda a hierarquia. | ### Response esperado — 200 ```json { "data": [ { "id": 123, "name": "Nome do Estande", "company_id": "", "company_name": "Nome da Empresa", "custom_lead_form_id": 456, "created_at": "2025-01-15T10:00:00.000-03:00", "updated_at": "2025-01-16T14:30:00.000-03:00" } ] } ``` ## Listar Leads do Estande `GET https://api.contact2sale.com/integration/integration/sales_stand/leads` Lista os leads capturados em estandes de vendas, com paginação de 50 registros por página. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer ` | Token de autenticação gerado no C2S | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `start_date` | string (YYYY-MM-DD) | Não | Início do período. Padrão: 1 mês atrás. | | `end_date` | string (YYYY-MM-DD) | Não | Fim do período. Padrão: hoje. | | `custom_lead_form_ids[]` | array de strings | Não | Filtra por formulário(s) de estande. Usar os custom_lead_form.id retornados por /stands. | | `company_ids[]` | array de strings | Não | Filtra por empresas específicas da hierarquia. | | `page` | integer | Não | Página desejada. Padrão: 1. | ### Response esperado — 200 ```json { "data": [ { "id": "", "customer_name": "Nome do Cliente", "customer_email": "cliente@exemplo.com", "customer_phone": "11999999999", "seller_name": "Nome do Vendedor", "status": "Em negociação", "check_in_at": "2025-01-15T10:00:00.000-03:00", "check_out_at": "2025-01-15T11:00:00.000-03:00", "created_at": "2025-01-15T10:00:00.000-03:00" } ], "pagination": { "current_page": 1, "per_page": 50, "total_count": 1, "total_pages": 1 } } ``` ## Resumo de Presenças `GET https://api.contact2sale.com/integration/integration/sales_stand/attendance_summaries` Lista o resumo de presenças por diretor/gerente/empresa com paginação de 50 registros por página. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `Bearer ` | Token de autenticação gerado no C2S | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `start_date` | string (YYYY-MM-DD) | Sim | Início do período. | | `end_date` | string (YYYY-MM-DD) | Sim | Fim do período. | | `sales_stand_ids[]` | array de strings | Não | Filtra por estande(s). Usar os id retornados por /stands. | | `company_ids[]` | array de strings | Não | Filtra por empresas específicas da hierarquia. | | `page` | integer | Não | Página desejada. Padrão: 1. | ### Response esperado — 200 ```json { "data": [ { "seller_id": "", "seller_name": "Nome do Vendedor", "total_attendances": 15, "total_leads_received": 10, "check_in_count": 20, "check_out_count": 20, "average_attendance_time_minutes": 45 } ] } ``` --- # Blocklist Endpoints para gerenciamento da blocklist de contatos da hierarquia. ⚠️ Esses endpoints só funcionam caso a função de "Hierarquia" esteja ativa na sua conta. ## Listar Blocklist `GET https://api.contact2sale.com/integration/integration/hierarchy_blocklists` Lista todas as entradas da blocklist da hierarquia da empresa autenticada, ordenadas pela mais recente. O escopo é sempre a hierarquia da empresa autenticada (determinado via `top_hierarchy_company`). ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `` | Token de autenticação gerado no C2S | ### Response esperado — 200 ```json { "blocklists": [ { "id": 789, "phone": "5511999999999", "email": null, "top_parent_company_id": "", "created_at": "2025-01-15T10:00:00.000-03:00", "updated_at": "2025-01-15T10:00:00.000-03:00" }, { "id": 788, "phone": null, "email": "bloqueado@exemplo.com", "top_parent_company_id": "", "created_at": "2025-01-14T10:00:00.000-03:00", "updated_at": "2025-01-14T10:00:00.000-03:00" } ] } ``` ## Adicionar à Blocklist `POST https://api.contact2sale.com/integration/integration/hierarchy_blocklists` Adiciona um telefone e/ou e-mail à blocklist da hierarquia. Ao ser criada, a entrada impede que novos leads com esse contato sejam distribuídos dentro da hierarquia. **Campos do body:** - `phone` (condicional) — Telefone do contato. Será normalizado (formato E.164 com variações). - `email` (condicional) — E-mail do contato. Será normalizado (lowercase + trim). - `remove_leads` (opcional, default: false) — Se `true`, dispara worker assíncrono para remover/redistribuir leads existentes que correspondam ao contato bloqueado. Se `false`, apenas registra o audit log. *Pelo menos um dos dois (`phone` ou `email`) deve ser enviado.* **Verificação de duplicidade:** O sistema verifica se já existe uma entrada com o mesmo telefone (considerando variações de formatação) ou e-mail na hierarquia. Se existir, retorna **409 Conflict**. **Notas:** - O campo `phone` passa por normalização automática cobrindo variações de DDD/DDI. - Enviar `11999998888` ou `+5511999998888` produz o mesmo resultado de conflito. **Respostas possíveis:** - `201` — Entrada criada com sucesso. - `409` — Já existe um registro com esse telefone/e-mail na hierarquia. - `422` — Falha de validação ou erro inesperado. ### Headers | Key | Value | Descrição | |---|---|---| | `Authorization` | `` | Token de autenticação gerado no C2S | | `Content-Type` | `application/json` | Tipo do conteúdo | ### Parâmetros | Nome | Tipo | Obrigatório | Descrição | |---|---|---|---| | `phone` | string | Não | Telefone do contato. Pelo menos phone ou email deve ser enviado. | | `email` | string | Não | E-mail do contato. Pelo menos phone ou email deve ser enviado. | | `remove_leads` | boolean | Não | Se true, remove/redistribui leads existentes com esse contato. Default: false. | ### Body ```json {"hierarchy_blocklist": {"phone": "11999998888", "email": "contato@empresa.com", "remove_leads": true}} ``` ### Response esperado — 201 ```json { "success": true } ```