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/v1

Autenticació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

GET/api/auth/signin/google

Redirigí 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..."

CRM — Contactos

Personas y leads.

Listar contactos

GET/api/v1/crm/contacts

Lista contactos. Filtros: q, page, pageSize (máx 100).

NombreTipoRequeridoDescripción
qstringNoQuery de búsqueda.
pageintegerNoNúmero de página.
pageSizeintegerNoItems 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

POST/api/v1/crm/contacts

Crea un contacto nuevo.

NombreTipoRequeridoDescripción
first_namestringNoNombre.
last_namestringNoApellido.
emailstringNoDirección de email.
lifecycle_stagestringNoEtapa 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

GET/api/v1/crm/contacts/{id}

Lee un contacto por id.

NombreTipoRequeridoDescripción
idstringId del registro.
curl -X GET "https://zerosoft.ai/api/v1/crm/contacts/{id}" \
  -H "Authorization: Bearer zs_live_9f3k..."

Actualizar un contacto

PATCH/api/v1/crm/contacts/{id}

Actualizá cualquier propiedad de un contacto.

NombreTipoRequeridoDescripción
idstringId del registro.
first_namestringNoNombre.
last_namestringNoApellido.
emailstringNoDirecció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

GET/api/v1/crm/companies

Lista empresas. Filtros: q, page, pageSize.

NombreTipoRequeridoDescripción
qstringNoQuery de búsqueda.
pageintegerNoNúmero de página.
pageSizeintegerNoItems 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

POST/api/v1/crm/companies

Crea una empresa nueva.

NombreTipoRequeridoDescripción
namestringNombre de la empresa.
domainstringNoNombre de dominio.
industrystringNoIndustria.
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

GET/api/v1/crm/companies/{id}

Lee una empresa por id.

NombreTipoRequeridoDescripción
idstringId del registro.
curl -X GET "https://zerosoft.ai/api/v1/crm/companies/{id}" \
  -H "Authorization: Bearer zs_live_9f3k..."

Actualizar una empresa

PATCH/api/v1/crm/companies/{id}

Actualizá cualquier propiedad de una empresa.

NombreTipoRequeridoDescripción
idstringId del registro.
namestringNoNombre de la empresa.
domainstringNoNombre 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

GET/api/v1/crm/deals

Lista deals. Filtro: pipelineId.

NombreTipoRequeridoDescripción
pipelineIdstringNoId del pipeline.
qstringNoQuery de búsqueda.
pageintegerNoNúmero de página.
pageSizeintegerNoItems 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

POST/api/v1/crm/deals

Crea un deal en una etapa del pipeline.

NombreTipoRequeridoDescripción
namestringNombre del deal.
amountnumberNoMonto del deal.
currencystringNoCódigo de moneda.
stage_idstringId 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

GET/api/v1/crm/deals/{id}

Lee un deal por id.

NombreTipoRequeridoDescripción
idstringId del registro.
curl -X GET "https://zerosoft.ai/api/v1/crm/deals/{id}" \
  -H "Authorization: Bearer zs_live_9f3k..."

Actualizar un deal

PATCH/api/v1/crm/deals/{id}

Actualizá monto, etapa o fechas.

NombreTipoRequeridoDescripción
idstringId del registro.
namestringNoNombre del deal.
amountnumberNoMonto del deal.
stage_idstringNoId 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

GET/api/v1/crm/tasks

Lista tareas. bucket: overdue, today, upcoming, done.

NombreTipoRequeridoDescripción
bucketstringNoBucket de filtro: overdue, today, upcoming, done.
pageintegerNoNúmero de página.
pageSizeintegerNoItems 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

POST/api/v1/crm/tasks

Crea una tarea, opcionalmente ligada a un registro.

NombreTipoRequeridoDescripción
subjectstringAsunto de la tarea.
due_atstring (ISO)NoFecha de vencimiento en formato ISO.
contact_idstringNoId del contacto vinculado.
company_idstringNoId de la empresa vinculada.
deal_idstringNoId 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

PATCH/api/v1/crm/tasks/{id}

Editá o completá una tarea.

NombreTipoRequeridoDescripción
idstringId del registro.
subjectstringNoAsunto de la tarea.
donebooleanNoMarcar 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

GET/api/crm/pipelines

Lista pipelines con sus etapas.

curl -X GET "https://zerosoft.ai/api/crm/pipelines" \
  -H "Authorization: Bearer zs_live_9f3k..."

Crear un pipeline

POST/api/crm/pipelines

Crea un pipeline nuevo.

NombreTipoRequeridoDescripción
namestringNombre 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

GET/api/crm/pipelines/{id}/stages

Lista las etapas de un pipeline.

NombreTipoRequeridoDescripción
idstringId del pipeline.
curl -X GET "https://zerosoft.ai/api/crm/pipelines/{id}/stages" \
  -H "Authorization: Bearer zs_live_9f3k..."

Crear una etapa

POST/api/crm/pipelines/{id}/stages

Crea una etapa dentro de un pipeline.

NombreTipoRequeridoDescripción
idstringId del pipeline.
namestringNombre de la etapa.
probabilityintegerNoProbabilidad 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

POST/api/teams/invites

Invitá un email a unirse a un equipo.

NombreTipoRequeridoDescripción
teamIdstringId del equipo.
emailstringEmail 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

POST/api/teams/accept

Aceptá una invitación por token.

NombreTipoRequeridoDescripción
tokenstringToken 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

POST/api/teams/switch

Cambiá el workspace activo. Usá teamId: null para el workspace personal.

NombreTipoRequeridoDescripción
teamIdstring | nullNoId 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

GET/api/docs/pages

Lista 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

POST/api/docs/pages

Crea una página de docs nueva.

NombreTipoRequeridoDescripción
titlestringTítulo de la página.
parent_idstringNoId de la página padre.
contentDocsBlock[]NoBloques 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

GET/api/docs/pages/{id}

Lee una página por id.

NombreTipoRequeridoDescripción
idstringId de la página.
curl -X GET "https://zerosoft.ai/api/docs/pages/{id}" \
  -H "Authorization: Bearer zs_live_9f3k..."

Actualizar página

PATCH/api/docs/pages/{id}

Actualizá título, contenido o archivá una página.

NombreTipoRequeridoDescripción
idstringId de la página.
titlestringNoTítulo de la página.
contentDocsBlock[]NoBloques de contenido de la página.
archivedbooleanNoFlag 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

DELETE/api/docs/pages/{id}

Borrá una página por id.

NombreTipoRequeridoDescripción
idstringId de la página.
curl -X DELETE "https://zerosoft.ai/api/docs/pages/{id}" \
  -H "Authorization: Bearer zs_live_9f3k..."

Respuesta · 200

{
  "ok": true
}