0.05 — API
A API da Zerosoft.
Zero fricção.
Todos os produtos expõem o mesmo estilo de API: REST, JSON e chaves pessoais. Se o dashboard faz, seu código também faz.
Base URL
https://zerosoft.ai/api/v1Autenticação
Cada requisição precisa de uma API key, enviada como Bearer token. Para sessões de navegador, o fluxo OAuth do Google cria o cookie de sessão.
Authorization: Bearer zs_live_9f3k...Crie as chaves em Dashboard → Settings → API keys. A chave é exibida uma única vez — copie e guarde como uma senha. Cada chave permite 100 requisições por minuto.
Login com Google
/api/auth/signin/googleRedirecione o usuário para iniciar o fluxo OAuth do Google. Após o sucesso ele retorna ao app com o cookie de sessão.
curl -X GET "https://zerosoft.ai/api/auth/signin/google" \
-H "Authorization: Bearer zs_live_9f3k..."Links
Criar, listar, atualizar e medir links curtos.
Criar um link
/api/v1/linksCria um link curto. slug é opcional — se omitido, geramos um.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | string | Sim | URL de destino. |
slug | string | Não | Slug curto personalizado. |
title | string | Não | Título legível. |
tags | string[] | Não | Array de strings de tags. |
curl -X POST "https://zerosoft.ai/api/v1/links" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"url": "https://zerosoft.ai/blog/software-is-dead",
"slug": "manifesto",
"title": "The manifesto",
"tags": [
"launch",
"blog"
]
}'Requisição
{
"url": "https://zerosoft.ai/blog/software-is-dead",
"slug": "manifesto",
"title": "The manifesto",
"tags": [
"launch",
"blog"
]
}Resposta · 201
{
"id": "lnk_9f3ka2",
"slug": "manifesto",
"short_url": "https://zs.ai/manifesto",
"url": "https://zerosoft.ai/blog/software-is-dead",
"title": "The manifesto",
"tags": [
"launch",
"blog"
],
"created_at": "2026-07-14T18:22:41Z"
}Listar links
/api/v1/linksSeus links, do mais novo ao mais antigo. Paginação com page e pageSize (máx 100).
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | integer | Não | Número da página. |
pageSize | integer | Não | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/links" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"links": [
{
"id": "lnk_9f3ka2",
"slug": "manifesto",
"short_url": "https://zs.ai/manifesto",
"url": "https://zerosoft.ai/blog/software-is-dead",
"title": "The manifesto",
"tags": [
"launch",
"blog"
],
"clicks": 4812,
"archived": false,
"created_at": "2026-07-14T18:22:41Z"
}
],
"total": 48
}Excluir um link
/api/v1/links/{id}Arquive ou exclua um link por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do link. |
curl -X DELETE "https://zerosoft.ai/api/v1/links/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"ok": true
}Atualizar um link
/api/v1/links/{id}Atualize qualquer campo editável de um link.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do link. |
url | string | Não | URL de destino. |
slug | string | Não | Slug curto personalizado. |
title | string | Não | Título legível. |
tags | string[] | Não | Array de strings de tags. |
archived | boolean | Não | Flag de arquivo. |
curl -X PATCH "https://zerosoft.ai/api/v1/links/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"title": "The manifesto — updated"
}'Requisição
{
"title": "The manifesto — updated"
}Resposta · 200
{
"ok": true
}Estatísticas de um link
/api/v1/links/{id}/statsTotais de cliques e detalhe por dia de um link.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do link. |
curl -X GET "https://zerosoft.ai/api/v1/links/{id}/stats" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"slug": "manifesto",
"total": 4812,
"byDay": [
{
"date": "2026-07-15",
"count": 412
},
{
"date": "2026-07-16",
"count": 388
},
{
"date": "2026-07-17",
"count": 441
}
]
}CRM — Contatos
Pessoas e leads.
Listar contatos
/api/v1/crm/contactsLista contatos. Filtros: q, page, pageSize (máx 100).
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
q | string | Não | Query de busca. |
page | integer | Não | Número da página. |
pageSize | integer | Não | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/contacts" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"rows": [
{
"id": "b1f47ac2-…",
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql",
"created_at": "2026-07-18 10:04:11"
}
],
"total": 142,
"page": 1,
"pageSize": 10
}Criar um contato
/api/v1/crm/contactsCria um contato novo.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
first_name | string | Não | Nome. |
last_name | string | Não | Sobrenome. |
email | string | Não | Endereço de email. |
lifecycle_stage | string | Não | Etapa do ciclo de vida (lead, sql, opportunity, customer). |
curl -X POST "https://zerosoft.ai/api/v1/crm/contacts" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql"
}'Requisição
{
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql"
}Resposta · 201
{
"id": "b1f47ac2-…",
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql",
"created_at": "2026-07-18 10:04:11"
}Ler um contato
/api/v1/crm/contacts/{id}Lê um contato por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/contacts/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Atualizar um contato
/api/v1/crm/contacts/{id}Atualize qualquer propriedade de um contato.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
first_name | string | Não | Nome. |
last_name | string | Não | Sobrenome. |
email | string | Não | Endereço de email. |
curl -X PATCH "https://zerosoft.ai/api/v1/crm/contacts/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"lifecycle_stage": "opportunity"
}'Requisição
{
"lifecycle_stage": "opportunity"
}CRM — Empresas
Organizações e contas.
Listar empresas
/api/v1/crm/companiesLista empresas. Filtros: q, page, pageSize.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
q | string | Não | Query de busca. |
page | integer | Não | Número da página. |
pageSize | integer | Não | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/companies" \
-H "Authorization: Bearer zs_live_9f3k..."Criar uma empresa
/api/v1/crm/companiesCria uma empresa nova.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome da empresa. |
domain | string | Não | Nome de domínio. |
industry | string | Não | Indústria. |
curl -X POST "https://zerosoft.ai/api/v1/crm/companies" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"name": "Norte Labs",
"domain": "nortelabs.co",
"industry": "Software"
}'Requisição
{
"name": "Norte Labs",
"domain": "nortelabs.co",
"industry": "Software"
}Ler uma empresa
/api/v1/crm/companies/{id}Lê uma empresa por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/companies/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Atualizar uma empresa
/api/v1/crm/companies/{id}Atualize qualquer propriedade de uma empresa.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
name | string | Não | Nome da empresa. |
domain | string | Não | Nome de domínio. |
curl -X PATCH "https://zerosoft.ai/api/v1/crm/companies/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"industry": "Cloud infrastructure"
}'Requisição
{
"industry": "Cloud infrastructure"
}CRM — Deals
Oportunidades e pipelines.
Listar deals
/api/v1/crm/dealsLista deals. Filtro: pipelineId.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
pipelineId | string | Não | Id do pipeline. |
q | string | Não | Query de busca. |
page | integer | Não | Número da página. |
pageSize | integer | Não | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/deals" \
-H "Authorization: Bearer zs_live_9f3k..."Criar um deal
/api/v1/crm/dealsCria um deal em uma etapa do pipeline.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do deal. |
amount | number | Não | Valor do deal. |
currency | string | Não | Código da moeda. |
stage_id | string | Sim | Id da etapa. |
curl -X POST "https://zerosoft.ai/api/v1/crm/deals" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"name": "Norte Labs — New business",
"amount": 24000,
"currency": "USD",
"stage_id": "{stage_id}"
}'Requisição
{
"name": "Norte Labs — New business",
"amount": 24000,
"currency": "USD",
"stage_id": "{stage_id}"
}Ler um deal
/api/v1/crm/deals/{id}Lê um deal por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/deals/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Atualizar um deal
/api/v1/crm/deals/{id}Atualize valor, etapa ou datas.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
name | string | Não | Nome do deal. |
amount | number | Não | Valor do deal. |
stage_id | string | Não | Id da etapa. |
curl -X PATCH "https://zerosoft.ai/api/v1/crm/deals/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"amount": 28000
}'Requisição
{
"amount": 28000
}CRM — Tarefas
Atividades e acompanhamentos.
Listar tarefas
/api/v1/crm/tasksLista tarefas. bucket: overdue, today, upcoming, done.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
bucket | string | Não | Bucket de filtro: overdue, today, upcoming, done. |
page | integer | Não | Número da página. |
pageSize | integer | Não | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/tasks" \
-H "Authorization: Bearer zs_live_9f3k..."Criar uma tarefa
/api/v1/crm/tasksCria uma tarefa, opcionalmente ligada a um registro.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
subject | string | Sim | Assunto da tarefa. |
due_at | string (ISO) | Não | Data de vencimento em formato ISO. |
contact_id | string | Não | Id do contato vinculado. |
company_id | string | Não | Id da empresa vinculada. |
deal_id | string | Não | Id do deal vinculado. |
curl -X POST "https://zerosoft.ai/api/v1/crm/tasks" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"subject": "Follow-up call",
"due_at": "2026-07-25T15:00:00Z",
"deal_id": "{deal_id}"
}'Requisição
{
"subject": "Follow-up call",
"due_at": "2026-07-25T15:00:00Z",
"deal_id": "{deal_id}"
}Atualizar uma tarefa
/api/v1/crm/tasks/{id}Edite ou conclua uma tarefa.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do registro. |
subject | string | Não | Assunto da tarefa. |
done | boolean | Não | Marcar como concluída. |
curl -X PATCH "https://zerosoft.ai/api/v1/crm/tasks/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"done": true
}'Requisição
{
"done": true
}CRM — Pipelines e etapas
Pipelines de vendas e suas etapas.
Listar pipelines
/api/crm/pipelinesLista pipelines com suas etapas.
curl -X GET "https://zerosoft.ai/api/crm/pipelines" \
-H "Authorization: Bearer zs_live_9f3k..."Criar um pipeline
/api/crm/pipelinesCria um pipeline novo.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do pipeline. |
curl -X POST "https://zerosoft.ai/api/crm/pipelines" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"name": "Sales"
}'Requisição
{
"name": "Sales"
}Listar etapas
/api/crm/pipelines/{id}/stagesLista as etapas de um pipeline.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do pipeline. |
curl -X GET "https://zerosoft.ai/api/crm/pipelines/{id}/stages" \
-H "Authorization: Bearer zs_live_9f3k..."Criar uma etapa
/api/crm/pipelines/{id}/stagesCria uma etapa dentro de um pipeline.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id do pipeline. |
name | string | Sim | Nome da etapa. |
probability | integer | Não | Probabilidade de ganhar (0-100). |
curl -X POST "https://zerosoft.ai/api/crm/pipelines/{id}/stages" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"name": "Proposal",
"probability": 50
}'Requisição
{
"name": "Proposal",
"probability": 50
}Equipes
Convidar, aceitar e trocar de workspace.
Convidar para a equipe
/api/teams/invitesConvide um email para entrar em uma equipe.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
teamId | string | Sim | Id da equipe. |
email | string | Sim | Email para convidar. |
curl -X POST "https://zerosoft.ai/api/teams/invites" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"teamId": "{team_id}",
"email": "teammate@company.com"
}'Requisição
{
"teamId": "{team_id}",
"email": "teammate@company.com"
}Resposta · 201
{
"invite": {
"id": "inv_…",
"token": "…"
},
"url": "https://zerosoft.ai/en/invite/…"
}Aceitar convite
/api/teams/acceptAceite um convite por token.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
token | string | Sim | Token de convite. |
curl -X POST "https://zerosoft.ai/api/teams/accept" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"token": "{invite_token}"
}'Requisição
{
"token": "{invite_token}"
}Resposta · 200
{
"ok": true,
"team": {
"id": "{team_id}",
"name": "Norte Labs"
}
}Trocar de equipe
/api/teams/switchTroque o workspace ativo. Use teamId: null para o workspace pessoal.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
teamId | string | null | Não | Id da equipe ou null para o workspace pessoal. |
curl -X POST "https://zerosoft.ai/api/teams/switch" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"teamId": "{team_id}"
}'Requisição
{
"teamId": "{team_id}"
}Resposta · 200
{
"ok": true
}Docs
Páginas e wikis.
Listar páginas
/api/docs/pagesLista as páginas de docs.
curl -X GET "https://zerosoft.ai/api/docs/pages" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"rows": [
{
"id": "page_…",
"title": "Wiki home",
"parent_id": null,
"updated_at": "2026-07-18T12:00:00Z"
}
]
}Criar página
/api/docs/pagesCria uma página de docs nova.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
title | string | Sim | Título da página. |
parent_id | string | Não | Id da página pai. |
content | DocsBlock[] | Não | Blocos de conteúdo da página. |
curl -X POST "https://zerosoft.ai/api/docs/pages" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"title": "Onboarding",
"parent_id": null,
"content": []
}'Requisição
{
"title": "Onboarding",
"parent_id": null,
"content": []
}Ler página
/api/docs/pages/{id}Lê uma página por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id da página. |
curl -X GET "https://zerosoft.ai/api/docs/pages/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Atualizar página
/api/docs/pages/{id}Atualize título, conteúdo ou arquive uma página.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id da página. |
title | string | Não | Título da página. |
content | DocsBlock[] | Não | Blocos de conteúdo da página. |
archived | boolean | Não | Flag de arquivo. |
curl -X PATCH "https://zerosoft.ai/api/docs/pages/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"title": "Onboarding v2"
}'Requisição
{
"title": "Onboarding v2"
}Excluir página
/api/docs/pages/{id}Exclua uma página por id.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | Id da página. |
curl -X DELETE "https://zerosoft.ai/api/docs/pages/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Resposta · 200
{
"ok": true
}