CRM de Prospecção
O funil de captação de alunos: etapas e leads. Envie leads do seu site, landing page ou chatbot direto para o quadro da escola e acompanhe a evolução de cada um até a matrícula.
O modelo lead
id
uuid
Identificador do lead.
status
string
open (em andamento), won (ganho) ou lost (perdido).
stage
object
Etapa atual (id, key, name).
type
string
pre_enrollment (aluno novo) ou rematricula.
source
string
Origem do lead.
student_* / guardian_*
string|null
Dados do aluno e do responsável.
interest_grade / interest_shift / school_year
object|null
Série, turno e ano letivo de interesse.
pre_enrollment_id / student_id / enrollment
mixed
Preenchidos quando o lead vira pré-matrícula, aluno e matrícula.
{ "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" }
/v1/partners/school/{cnpj}/crm/stages/all
Listar etapas do funil
Etapas do funil de matrícula na ordem do quadro, com a quantidade de leads em cada uma. Na primeira consulta de uma escola, o funil padrão é criado automaticamente. Não paginado.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
$response = $client->get('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/stages/all', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/stages/all', { method: 'GET', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, });
{ "data": [ { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado", "order": 1, "color": "#6366f1", "probability": 25, "is_won": false, "is_lost": false, "system_driven": false, "leads_count": 12 } ] }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/leads/all
Listar leads
Leads da escola, do mais recente para o mais antigo. Paginado (25 por página).
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
Filtros (query string)
search
string
opcional
Parte do nome do aluno ou do responsável, e-mail ou telefone.
status
string
opcional
open, won ou lost.
source
string
opcional
Origem do lead.
stage_id
uuid
opcional
Somente uma etapa.
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
422
Parâmetros inválidos — veja errors.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
$response = $client->get('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/leads/all', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/leads/all', { method: 'GET', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, });
{ "data": [ { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } ], "links": { /* first, prev, next */ }, "meta": { "current_page": 1, "per_page": 25 } }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/lead/{id}
Obter lead
Um lead.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
uuid
obrigatório
UUID do lead.
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
$response = $client->get('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}', { method: 'GET', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, });
{ "data": { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/lead
Criar lead
Adiciona um lead ao funil — por exemplo, a partir do formulário do seu site ou de uma campanha. A equipe da escola é notificada e a criação fica no histórico do lead. Dispara o webhook crm_lead.created.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
Parâmetros do corpo
crm_stage_id
uuid
opcional
Etapa inicial. Padrão: a primeira etapa manual do funil. Etapas automáticas, ganhas ou perdidas não são aceitas.
student_name
string
obrigatório
Nome do aluno interessado.
guardian_name
string
obrigatório
Nome do responsável.
student_birthdate
date
opcional
Nascimento do aluno (AAAA-MM-DD).
guardian_cpf
string
opcional
CPF do responsável.
guardian_email
string
opcional
E-mail do responsável.
guardian_phone
string
opcional
Telefone/WhatsApp do responsável.
source
string
opcional
Origem: website, walk_in, phone, whatsapp, referral, social_media, public_form ou other (padrão).
interest_grade_id
uuid
opcional
Série de interesse (veja Séries e Anos).
interest_shift_id
uuid
opcional
Turno de interesse.
school_year_id
uuid
opcional
Ano letivo de interesse (da própria escola).
estimated_value
number
opcional
Valor anual estimado do contrato.
notes
string
opcional
Observações.
Códigos de resposta
201
Recurso criado.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
422
Dados inválidos, ou etapa inicial não permitida (INVALID_STAGE).
-X POST \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"student_name":"Lucas Pereira","guardian_name":"Aline Pereira","guardian_email":"aline.pereira@email.com","guardian_phone":"(21) 99999-1234","source":"website"}'
$response = $client->post('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client 'json' => json_decode('{"student_name":"Lucas Pereira","guardian_name":"Aline Pereira","guardian_email":"aline.pereira@email.com","guardian_phone":"(21) 99999-1234","source":"website"}', true), ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead', { method: 'POST', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, body: JSON.stringify({"student_name":"Lucas Pereira","guardian_name":"Aline Pereira","guardian_email":"aline.pereira@email.com","guardian_phone":"(21) 99999-1234","source":"website"}), });
{ "data": { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/lead/{id}
Editar lead
Atualiza os dados do lead. Somente os campos enviados são alterados; a etapa muda pelos endpoints abaixo.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
uuid
obrigatório
UUID do lead.
Parâmetros do corpo
student_name
string
opcional
Nome do aluno interessado.
guardian_name
string
opcional
Nome do responsável.
student_birthdate
date
opcional
Nascimento do aluno (AAAA-MM-DD).
guardian_cpf
string
opcional
CPF do responsável.
guardian_email
string
opcional
E-mail do responsável.
guardian_phone
string
opcional
Telefone/WhatsApp do responsável.
source
string
opcional
Origem: website, walk_in, phone, whatsapp, referral, social_media, public_form ou other (padrão).
interest_grade_id
uuid
opcional
Série de interesse (veja Séries e Anos).
interest_shift_id
uuid
opcional
Turno de interesse.
school_year_id
uuid
opcional
Ano letivo de interesse (da própria escola).
estimated_value
number
opcional
Valor anual estimado do contrato.
notes
string
opcional
Observações.
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
422
Parâmetros inválidos — veja errors.
-X PUT \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"guardian_phone":"(21) 98888-0000","notes":"Agendou visita para sexta."}'
$response = $client->put('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client 'json' => json_decode('{"guardian_phone":"(21) 98888-0000","notes":"Agendou visita para sexta."}', true), ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}', { method: 'PUT', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, body: JSON.stringify({"guardian_phone":"(21) 98888-0000","notes":"Agendou visita para sexta."}), });
{ "data": { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b5-71dd-84d1-1450de044b26", "key": "contacted", "name": "Contato Realizado" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/lead/{id}/stage
Mover lead de etapa
Move o lead para outra etapa do funil, como arrastar o cartão no quadro. Mover para uma etapa ganha ou perdida altera o status para won / lost. Dispara o webhook crm_lead.stage_changed.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
uuid
obrigatório
UUID do lead.
Parâmetros do corpo
crm_stage_id
uuid
obrigatório
Etapa de destino (do funil desta escola).
As etapas Pré-matrícula, Rematrícula e Matriculado (system_driven: true) refletem o fluxo real de matrícula: não podem ser destino nem origem de uma movimentação manual — a resposta é 422 com code: "SYSTEM_DRIVEN_STAGE". Elas são alcançadas quando a escola converte o lead em pré-matrícula e efetiva a matrícula.
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
422
Etapa automática (SYSTEM_DRIVEN_STAGE) ou dados inválidos.
-X PATCH \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"crm_stage_id":"019f91d7-47b9-7037-aec8-c7a63dc485ef"}'
$response = $client->patch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}/stage', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client 'json' => json_decode('{"crm_stage_id":"019f91d7-47b9-7037-aec8-c7a63dc485ef"}', true), ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}/stage', { method: 'PATCH', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, body: JSON.stringify({"crm_stage_id":"019f91d7-47b9-7037-aec8-c7a63dc485ef"}), });
{ "data": { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "open", "status_label": "Em andamento", "stage": { "id": "019f91d7-47b9-7037-aec8-c7a63dc485ef", "key": "visit_scheduled", "name": "Visita Agendada" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": null, "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } }
{ "success": false, "message": "Esta etapa é definida automaticamente pelo fluxo de matrícula e não aceita movimentação manual." }
{ "success": false, "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/crm/lead/{id}/lost
Marcar lead como perdido
Registra o motivo da perda e move o lead para a etapa de perdidos. Dispara o webhook crm_lead.stage_changed.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
uuid
obrigatório
UUID do lead.
Parâmetros do corpo
lost_reason
string
opcional
Motivo da perda (até 1000 caracteres).
Códigos de resposta
200
Sucesso.
401
Credenciais inválidas (X-Partner, X-Client ou X-Authorization).
403
Cliente fora do plano Gestão Escolar (ERP_REQUIRED) ou módulo exclusivo de escolas privadas (PRIVATE_CLIENT_REQUIRED).
404
Escola ou recurso não encontrado.
422
Lead em etapa automática (SYSTEM_DRIVEN_STAGE) ou dados inválidos.
-X PATCH \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"lost_reason":"Mudou de cidade"}'
$response = $client->patch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}/lost', [ 'headers' => $headers, // X-Authorization, X-Partner, X-Client 'json' => json_decode('{"lost_reason":"Mudou de cidade"}', true), ]);
const res = await fetch('https://toakiescola.com.br/api/v1/partners/school/{cnpj}/crm/lead/{id}/lost', { method: 'PATCH', headers: { /* X-Authorization, X-Partner, X-Client */ 'Content-Type': 'application/json' }, body: JSON.stringify({"lost_reason":"Mudou de cidade"}), });
{ "data": { "id": "019ff604-2f05-701b-b3b9-dc9426f2d342", "status": "lost", "status_label": "Perdido", "stage": { "id": "019f91d7-47c9-7000-8000-000000000009", "key": "lost", "name": "Perdido" }, "type": "pre_enrollment", "source": "website", "source_label": "Site", "student_name": "Lucas Pereira", "student_birthdate": "2016-04-12", "guardian_name": "Aline Pereira", "guardian_cpf": "39053344705", "guardian_email": "aline.pereira@email.com", "guardian_phone": "(21) 99999-1234", "interest_grade": { "id": "019f051a-921b-70c9-b645-e45d945764ae", "name": "5º Ano" }, "interest_shift": { "id": "019f051a-9a00-7000-8000-000000000001", "name": "Manhã" }, "school_year": { "id": "019e6e4b-30ff-7140-89ff-810f32d19a18", "name": "2027" }, "estimated_value": 14400, "lost_reason": "Mudou de cidade", "notes": "Veio pela campanha de rematrícula.", "pre_enrollment_id": null, "student_id": null, "enrollment": null, "entered_stage_at": "2026-09-28T10:00:00-03:00", "last_activity_at": "2026-09-30T16:20:00-03:00", "created_at": "2026-09-25T09:12:00-03:00", "updated_at": "2026-09-30T16:20:00-03:00" } }
{ "success": false, "message": "Escola não encontrada." }