0.05 — API
La API de Zerosoft.
Cero fricción.
Todos los productos exponen la misma API: REST, JSON y keys personales. Si el dashboard lo puede hacer, tu código también.
Base URL
https://zerosoft.ai/api/v1Autenticación
Cada request necesita una API key, enviada como Bearer token. Para sesiones de navegador, el flujo OAuth de Google crea la cookie de sesión.
Authorization: Bearer zs_live_9f3k...Creá las keys en Dashboard → Settings → API keys. La key se muestra una sola vez — copiala y guardala como una contraseña. Cada key permite 100 requests por minuto.
Inicio de sesión con Google
/api/auth/signin/googleRedirigí al usuario para iniciar el flujo OAuth de Google. Tras el éxito vuelve a la app con la cookie de sesión.
curl -X GET "https://zerosoft.ai/api/auth/signin/google" \
-H "Authorization: Bearer zs_live_9f3k..."Links
Crear, listar, actualizar y medir links cortos.
Crear un link
/api/v1/linksCrea un link corto. slug es opcional — si lo omitís, generamos uno.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
url | string | Sí | URL de destino. |
slug | string | No | Slug corto personalizado. |
title | string | No | Título legible. |
tags | string[] | No | 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"
]
}'Request
{
"url": "https://zerosoft.ai/blog/software-is-dead",
"slug": "manifesto",
"title": "The manifesto",
"tags": [
"launch",
"blog"
]
}Respuesta · 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/linksTus links, del más nuevo al más viejo. Paginá con page y pageSize (máx 100).
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
page | integer | No | Número de página. |
pageSize | integer | No | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/links" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 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
}Borrar un link
/api/v1/links/{id}Archivá o borrá un link por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del link. |
curl -X DELETE "https://zerosoft.ai/api/v1/links/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 200
{
"ok": true
}Actualizar un link
/api/v1/links/{id}Actualizá cualquier campo editable de un link.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del link. |
url | string | No | URL de destino. |
slug | string | No | Slug corto personalizado. |
title | string | No | Título legible. |
tags | string[] | No | Array de strings de tags. |
archived | boolean | No | Flag de archivo. |
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"
}'Request
{
"title": "The manifesto — updated"
}Respuesta · 200
{
"ok": true
}Estadísticas de un link
/api/v1/links/{id}/statsTotales de clicks y el detalle por día de un link.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del link. |
curl -X GET "https://zerosoft.ai/api/v1/links/{id}/stats" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 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 — Contactos
Personas y leads.
Listar contactos
/api/v1/crm/contactsLista contactos. Filtros: q, page, pageSize (máx 100).
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
q | string | No | Query de búsqueda. |
page | integer | No | Número de página. |
pageSize | integer | No | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/contacts" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 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
}Crear un contacto
/api/v1/crm/contactsCrea un contacto nuevo.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
first_name | string | No | Nombre. |
last_name | string | No | Apellido. |
email | string | No | Dirección de email. |
lifecycle_stage | string | No | Etapa del 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"
}'Request
{
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql"
}Respuesta · 201
{
"id": "b1f47ac2-…",
"first_name": "Ana",
"last_name": "Garcia",
"email": "ana@kallpa.co",
"lifecycle_stage": "sql",
"created_at": "2026-07-18 10:04:11"
}Leer un contacto
/api/v1/crm/contacts/{id}Lee un contacto por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/contacts/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Actualizar un contacto
/api/v1/crm/contacts/{id}Actualizá cualquier propiedad de un contacto.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
first_name | string | No | Nombre. |
last_name | string | No | Apellido. |
email | string | No | Dirección 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"
}'Request
{
"lifecycle_stage": "opportunity"
}CRM — Empresas
Organizaciones y cuentas.
Listar empresas
/api/v1/crm/companiesLista empresas. Filtros: q, page, pageSize.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
q | string | No | Query de búsqueda. |
page | integer | No | Número de página. |
pageSize | integer | No | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/companies" \
-H "Authorization: Bearer zs_live_9f3k..."Crear una empresa
/api/v1/crm/companiesCrea una empresa nueva.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre de la empresa. |
domain | string | No | Nombre de dominio. |
industry | string | No | Industria. |
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"
}'Request
{
"name": "Norte Labs",
"domain": "nortelabs.co",
"industry": "Software"
}Leer una empresa
/api/v1/crm/companies/{id}Lee una empresa por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/companies/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Actualizar una empresa
/api/v1/crm/companies/{id}Actualizá cualquier propiedad de una empresa.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
name | string | No | Nombre de la empresa. |
domain | string | No | Nombre de dominio. |
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"
}'Request
{
"industry": "Cloud infrastructure"
}CRM — Deals
Oportunidades y pipelines.
Listar deals
/api/v1/crm/dealsLista deals. Filtro: pipelineId.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
pipelineId | string | No | Id del pipeline. |
q | string | No | Query de búsqueda. |
page | integer | No | Número de página. |
pageSize | integer | No | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/deals" \
-H "Authorization: Bearer zs_live_9f3k..."Crear un deal
/api/v1/crm/dealsCrea un deal en una etapa del pipeline.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del deal. |
amount | number | No | Monto del deal. |
currency | string | No | Código de moneda. |
stage_id | string | Sí | Id de la 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}"
}'Request
{
"name": "Norte Labs — New business",
"amount": 24000,
"currency": "USD",
"stage_id": "{stage_id}"
}Leer un deal
/api/v1/crm/deals/{id}Lee un deal por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
curl -X GET "https://zerosoft.ai/api/v1/crm/deals/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Actualizar un deal
/api/v1/crm/deals/{id}Actualizá monto, etapa o fechas.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
name | string | No | Nombre del deal. |
amount | number | No | Monto del deal. |
stage_id | string | No | Id de la 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
}'Request
{
"amount": 28000
}CRM — Tareas
Actividades y seguimientos.
Listar tareas
/api/v1/crm/tasksLista tareas. bucket: overdue, today, upcoming, done.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
bucket | string | No | Bucket de filtro: overdue, today, upcoming, done. |
page | integer | No | Número de página. |
pageSize | integer | No | Items por página (máx 100). |
curl -X GET "https://zerosoft.ai/api/v1/crm/tasks" \
-H "Authorization: Bearer zs_live_9f3k..."Crear una tarea
/api/v1/crm/tasksCrea una tarea, opcionalmente ligada a un registro.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
subject | string | Sí | Asunto de la tarea. |
due_at | string (ISO) | No | Fecha de vencimiento en formato ISO. |
contact_id | string | No | Id del contacto vinculado. |
company_id | string | No | Id de la empresa vinculada. |
deal_id | string | No | Id del 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}"
}'Request
{
"subject": "Follow-up call",
"due_at": "2026-07-25T15:00:00Z",
"deal_id": "{deal_id}"
}Actualizar una tarea
/api/v1/crm/tasks/{id}Editá o completá una tarea.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del registro. |
subject | string | No | Asunto de la tarea. |
done | boolean | No | Marcar como hecha. |
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
}'Request
{
"done": true
}CRM — Pipelines y etapas
Pipelines de venta y sus etapas.
Listar pipelines
/api/crm/pipelinesLista pipelines con sus etapas.
curl -X GET "https://zerosoft.ai/api/crm/pipelines" \
-H "Authorization: Bearer zs_live_9f3k..."Crear un pipeline
/api/crm/pipelinesCrea un pipeline nuevo.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del pipeline. |
curl -X POST "https://zerosoft.ai/api/crm/pipelines" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"name": "Sales"
}'Request
{
"name": "Sales"
}Listar etapas
/api/crm/pipelines/{id}/stagesLista las etapas de un pipeline.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del pipeline. |
curl -X GET "https://zerosoft.ai/api/crm/pipelines/{id}/stages" \
-H "Authorization: Bearer zs_live_9f3k..."Crear una etapa
/api/crm/pipelines/{id}/stagesCrea una etapa dentro de un pipeline.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id del pipeline. |
name | string | Sí | Nombre de la etapa. |
probability | integer | No | Probabilidad de ganar (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
}'Request
{
"name": "Proposal",
"probability": 50
}Equipos
Invitar, aceptar y cambiar de workspace.
Invitar al equipo
/api/teams/invitesInvitá un email a unirse a un equipo.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
teamId | string | Sí | Id del equipo. |
email | string | Sí | Email a invitar. |
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"
}'Request
{
"teamId": "{team_id}",
"email": "teammate@company.com"
}Respuesta · 201
{
"invite": {
"id": "inv_…",
"token": "…"
},
"url": "https://zerosoft.ai/en/invite/…"
}Aceptar invitación
/api/teams/acceptAceptá una invitación por token.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
token | string | Sí | Token de invitación. |
curl -X POST "https://zerosoft.ai/api/teams/accept" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"token": "{invite_token}"
}'Request
{
"token": "{invite_token}"
}Respuesta · 200
{
"ok": true,
"team": {
"id": "{team_id}",
"name": "Norte Labs"
}
}Cambiar de equipo
/api/teams/switchCambiá el workspace activo. Usá teamId: null para el workspace personal.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
teamId | string | null | No | Id del equipo o null para el workspace personal. |
curl -X POST "https://zerosoft.ai/api/teams/switch" \
-H "Authorization: Bearer zs_live_9f3k..."
-H "Content-Type: application/json" \
-d '{
"teamId": "{team_id}"
}'Request
{
"teamId": "{team_id}"
}Respuesta · 200
{
"ok": true
}Docs
Páginas y wikis.
Listar páginas
/api/docs/pagesLista las páginas de docs.
curl -X GET "https://zerosoft.ai/api/docs/pages" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 200
{
"rows": [
{
"id": "page_…",
"title": "Wiki home",
"parent_id": null,
"updated_at": "2026-07-18T12:00:00Z"
}
]
}Crear página
/api/docs/pagesCrea una página de docs nueva.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
title | string | Sí | Título de la página. |
parent_id | string | No | Id de la página padre. |
content | DocsBlock[] | No | Bloques de contenido de la 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": []
}'Request
{
"title": "Onboarding",
"parent_id": null,
"content": []
}Leer página
/api/docs/pages/{id}Lee una página por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id de la página. |
curl -X GET "https://zerosoft.ai/api/docs/pages/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Actualizar página
/api/docs/pages/{id}Actualizá título, contenido o archivá una página.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id de la página. |
title | string | No | Título de la página. |
content | DocsBlock[] | No | Bloques de contenido de la página. |
archived | boolean | No | Flag de archivo. |
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"
}'Request
{
"title": "Onboarding v2"
}Borrar página
/api/docs/pages/{id}Borrá una página por id.
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Id de la página. |
curl -X DELETE "https://zerosoft.ai/api/docs/pages/{id}" \
-H "Authorization: Bearer zs_live_9f3k..."Respuesta · 200
{
"ok": true
}