Skip to content

Empresas

Gestiona las empresas de tu espacio de trabajo. Las empresas agrupan contactos bajo una organización común y sirven como punto de referencia para negocios, cotizaciones y otras entidades comerciales.

Autenticación

Requiere header Authorization: Bearer {token}. Ver .

Permisos requeridos

Las operaciones sobre empresas requieren los permisos companies:read, companies:create, companies:update o companies:delete según corresponda.


Listar empresas

http
GET /companies

Retorna una lista paginada de empresas del espacio de trabajo. Soporta búsqueda de texto libre, filtros por responsable e industria, y ordenamiento por múltiples campos.

Parámetros de consulta

ParámetroTipoRequeridoDescripción
cursorstringNoCursor de paginación. Usa el valor nextCursor de la respuesta anterior
limitintegerNoCantidad de resultados por página. Mínimo 1, máximo 100. Default: 25
sortstringNoCampo por el que ordenar. Valores: created_at, updated_at, name, employee_count, annual_revenue. Default: created_at
orderstringNoDirección del ordenamiento: asc o desc. Default: desc
searchstringNoBúsqueda de texto libre sobre nombre, email y teléfono de la empresa
owner_idstringNoFiltra por ID del responsable asignado
industrystringNoFiltra por sector o industria (ej. tecnologia, salud, retail)

Ejemplos

bash
curl -X GET "https://api-crm.zelta.dev/public/v1/companies?limit=20&search=constructora" \
  -H "Authorization: Bearer tu-api-key-aqui"

Ejemplo JS

javascript
const params = new URLSearchParams({
  limit: '20',
  search: 'constructora',
  sort: 'name',
  order: 'asc'
});

const response = await fetch(
  `https://api-crm.zelta.dev/public/v1/companies?${params}`,
  {
    headers: {
      'Authorization': `Bearer ${process.env.ZELTA_API_KEY}`
    }
  }
);

const data = await response.json();
console.log(data.data);       // array de empresas
console.log(data.nextCursor); // cursor para la siguiente página

Ejemplo Py

python
import requests

response = requests.get(
    'https://api-crm.zelta.dev/public/v1/companies',
    params={
        'limit': 20,
        'search': 'constructora',
        'sort': 'name',
        'order': 'asc'
    },
    headers={
        'Authorization': 'Bearer tu-api-key-aqui'
    }
)

data = response.json()
companies = data['data']

Respuesta exitosa

HTTP 200 OK

json
{
  "data": [
    {
      "id": "cmp_r8v2wlnp4s",
      "name": "Constructora del Pacífico S.A.",
      "website": "https://constructorapacífico.com",
      "industry": "Construcción",
      "employeeCount": 250,
      "annualRevenue": 5000000,
      "currency": "USD",
      "phone": "+507 264-1234",
      "email": "contacto@constructorapacífico.com",
      "description": "Empresa de construcción con más de 30 años de experiencia.",
      "ownerId": "usr_b4h7czjp9e",
      "ownerName": "Carlos Rodríguez",
      "tags": [
        {
          "id": "tag_m9d3vbkp2r",
          "label": "Cliente activo",
          "handle": "cliente-activo",
          "color": "#10B981"
        }
      ],
      "customData": {},
      "addressCountryId": 171,
      "addressCountryName": "Panamá",
      "addressStateId": 1234,
      "addressStateName": "Panamá",
      "addressCityId": 56789,
      "addressCityName": "Ciudad de Panamá",
      "createdAt": "2025-01-20T09:00:00.000Z",
      "updatedAt": "2025-03-28T14:15:00.000Z"
    }
  ],
  "nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI1LTAxLTIwVDA5OjAwOjAwLjAwMFoiLCJpZCI6ImNtcF9yOHYyd2xucDRzIn0=",
  "hasMore": false
}

Obtener una empresa

http
GET /companies/:id

Retorna los datos completos de una empresa específica por su ID.

Ejemplos

bash
curl -X GET "https://api-crm.zelta.dev/public/v1/companies/cmp_r8v2wlnp4s" \
  -H "Authorization: Bearer tu-api-key-aqui"

Ejemplo JS

javascript
const companyId = 'cmp_r8v2wlnp4s';
const response = await fetch(
  `https://api-crm.zelta.dev/public/v1/companies/${companyId}`,
  {
    headers: {
      'Authorization': `Bearer ${process.env.ZELTA_API_KEY}`
    }
  }
);

const company = await response.json();

Ejemplo Py

python
import requests

company_id = 'cmp_r8v2wlnp4s'
response = requests.get(
    f'https://api-crm.zelta.dev/public/v1/companies/{company_id}',
    headers={'Authorization': 'Bearer tu-api-key-aqui'}
)

company = response.json()

Respuesta exitosa

HTTP 200 OK

Retorna el objeto completo de la empresa con todos sus campos. Ver .


Crear una empresa

http
POST /companies

Crea una nueva empresa en el espacio de trabajo.

Cuerpo de la solicitud

CampoTipoRequeridoDescripción
namestringNombre de la empresa. Máximo 200 caracteres
websitestringNoSitio web de la empresa. Debe ser una URL válida (ej. https://empresa.com)
industrystringNoSector o industria a la que pertenece la empresa
employeeCountintegerNoNúmero aproximado de empleados
annualRevenueintegerNoIngresos anuales estimados en la moneda indicada
currencystringNoCódigo ISO 4217 de la moneda para annualRevenue. Máximo 3 caracteres (ej. USD, MXN, PAB)
phonestringNoTeléfono principal de la empresa
emailstringNoCorreo electrónico de contacto de la empresa
descriptionstringNoDescripción o notas generales sobre la empresa
ownerIdstringNoID del usuario responsable. Si se omite, se asigna al usuario que realiza la solicitud
tagsstring[]NoArray de IDs de etiquetas a asignar a la empresa
customDataobjectNoDatos de campos personalizados definidos en el espacio de trabajo
addressCountryIdintegerNoID del país (tabla de referencia geográfica)
addressStateIdintegerNoID del estado o provincia
addressCityIdintegerNoID de la ciudad

Ejemplos

bash
curl -X POST "https://api-crm.zelta.dev/public/v1/companies" \
  -H "Authorization: Bearer tu-api-key-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Constructora del Pacífico S.A.",
    "website": "https://constructorapacifico.com",
    "industry": "Construcción",
    "employeeCount": 250,
    "annualRevenue": 5000000,
    "currency": "USD",
    "phone": "+507 264-1234",
    "email": "[email protected]",
    "addressCountryId": 171,
    "addressStateId": 1234,
    "addressCityId": 56789
  }'

Ejemplo JS

javascript
const response = await fetch('https://api-crm.zelta.dev/public/v1/companies', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.ZELTA_API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Constructora del Pacífico S.A.',
    website: 'https://constructorapacifico.com',
    industry: 'Construcción',
    employeeCount: 250,
    annualRevenue: 5000000,
    currency: 'USD',
    phone: '+507 264-1234',
    email: '[email protected]',
    addressCountryId: 171,
    addressStateId: 1234,
    addressCityId: 56789
  })
});

const company = await response.json();
console.log(company.id); // ID de la nueva empresa

Ejemplo Py

python
import requests

response = requests.post(
    'https://api-crm.zelta.dev/public/v1/companies',
    headers={
        'Authorization': 'Bearer tu-api-key-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'name': 'Constructora del Pacífico S.A.',
        'website': 'https://constructorapacifico.com',
        'industry': 'Construcción',
        'employeeCount': 250,
        'annualRevenue': 5000000,
        'currency': 'USD',
        'phone': '+507 264-1234',
        'email': '[email protected]',
        'addressCountryId': 171,
        'addressStateId': 1234,
        'addressCityId': 56789
    }
)

company = response.json()
print(company['id'])

Respuesta exitosa

HTTP 201 Created

Retorna el objeto completo de la empresa recién creada.


Actualizar una empresa

http
PUT /companies/:id

Actualiza los datos de una empresa existente. Solo se actualizan los campos incluidos en el cuerpo — los campos omitidos conservan su valor actual.

Cuerpo de la solicitud

Todos los campos son opcionales. Ver la tabla de para las definiciones de cada campo.

Ejemplos

bash
curl -X PUT "https://api-crm.zelta.dev/public/v1/companies/cmp_r8v2wlnp4s" \
  -H "Authorization: Bearer tu-api-key-aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "employeeCount": 320,
    "annualRevenue": 7500000,
    "description": "Empresa líder en infraestructura civil en la región."
  }'

Ejemplo JS

javascript
const companyId = 'cmp_r8v2wlnp4s';
const response = await fetch(
  `https://api-crm.zelta.dev/public/v1/companies/${companyId}`,
  {
    method: 'PUT',
    headers: {
      'Authorization': `Bearer ${process.env.ZELTA_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      employeeCount: 320,
      annualRevenue: 7500000,
      description: 'Empresa líder en infraestructura civil en la región.'
    })
  }
);

const updated = await response.json();

Ejemplo Py

python
import requests

company_id = 'cmp_r8v2wlnp4s'
response = requests.put(
    f'https://api-crm.zelta.dev/public/v1/companies/{company_id}',
    headers={
        'Authorization': 'Bearer tu-api-key-aqui',
        'Content-Type': 'application/json'
    },
    json={
        'employeeCount': 320,
        'annualRevenue': 7500000,
        'description': 'Empresa líder en infraestructura civil en la región.'
    }
)

updated = response.json()

Respuesta exitosa

HTTP 200 OK

Retorna el objeto completo de la empresa con los campos actualizados.


Eliminar una empresa

http
DELETE /companies/:id

Elimina una empresa de forma lógica (soft delete). La empresa queda inaccesible desde la API y la interfaz, pero sus datos no se borran permanentemente.

Contactos asociados

Eliminar una empresa no elimina sus contactos asociados. Los contactos mantienen la referencia al companyId pero la empresa aparecerá como no disponible al consultar el contacto. Considera desvincular los contactos antes de eliminar la empresa si esto es relevante para tu integración.

Ejemplos

bash
curl -X DELETE "https://api-crm.zelta.dev/public/v1/companies/cmp_r8v2wlnp4s" \
  -H "Authorization: Bearer tu-api-key-aqui"

Ejemplo JS

javascript
const companyId = 'cmp_r8v2wlnp4s';
const response = await fetch(
  `https://api-crm.zelta.dev/public/v1/companies/${companyId}`,
  {
    method: 'DELETE',
    headers: {
      'Authorization': `Bearer ${process.env.ZELTA_API_KEY}`
    }
  }
);

const result = await response.json();
// { "success": true }

Ejemplo Py

python
import requests

company_id = 'cmp_r8v2wlnp4s'
response = requests.delete(
    f'https://api-crm.zelta.dev/public/v1/companies/{company_id}',
    headers={'Authorization': 'Bearer tu-api-key-aqui'}
)

result = response.json()
# {'success': True}

Respuesta exitosa

HTTP 200 OK

json
{
  "success": true
}

Campos de la respuesta

CampoTipoDescripción
idstringIdentificador único de la empresa
namestringNombre de la empresa
websitestring | nullSitio web
industrystring | nullSector o industria
employeeCountinteger | nullNúmero de empleados
annualRevenueinteger | nullIngresos anuales estimados
currencystring | nullCódigo ISO 4217 de la moneda de annualRevenue
phonestring | nullTeléfono principal
emailstring | nullCorreo electrónico de contacto
descriptionstring | nullDescripción o notas generales
ownerIdstring | nullID del responsable asignado
ownerNamestring | nullNombre completo del responsable (resuelto por JOIN)
tagsarrayEtiquetas asignadas a la empresa
tags[].idstringID de la etiqueta
tags[].labelstringNombre visible de la etiqueta
tags[].handlestringIdentificador slug de la etiqueta
tags[].colorstringColor hex de la etiqueta
customDataobjectValores de campos personalizados
addressCountryIdinteger | nullID del país
addressCountryNamestring | nullNombre del país
addressStateIdinteger | nullID del estado o provincia
addressStateNamestring | nullNombre del estado o provincia
addressCityIdinteger | nullID de la ciudad
addressCityNamestring | nullNombre de la ciudad
createdAtstringFecha de creación en formato ISO 8601
updatedAtstringFecha de última actualización en formato ISO 8601

Problemas comunes

ErrorCausaSolución
401 UnauthorizedAPI Key inválida o ausenteVerifica que el header Authorization incluya un token válido
403 ForbiddenSin permisos suficientesEl rol asociado a tu API Key no tiene el permiso companies:read o companies:create
404 Not FoundEmpresa no encontradaVerifica que el ID sea correcto y pertenezca al espacio de trabajo del token
422 Unprocessable EntityError de validaciónRevisa que el campo name esté presente y que website sea una URL válida
400website inválidoURL malformadaEl campo website debe incluir el protocolo (https://)
400currency inválidoCódigo de moneda no reconocidoUsa un código ISO 4217 de 3 letras válido (ej. USD, MXN, EUR)
400ownerId inválidoEl usuario no pertenece al workspaceUsa solo IDs de miembros activos del espacio de trabajo

Datos geográficos

Los IDs de país, estado y ciudad provienen de la tabla de referencia geográfica de Zelta CRM. Puedes consultarlos mediante los endpoints públicos de geo (/geo/countries, /geo/states/:countryId, /geo/cities/:stateId) sin necesidad de autenticación.


Siguientes pasos

  • — Asocia personas a una empresa
  • — Vincula negocios a una empresa
  • — Cómo generar y usar tu API Key

Documentación oficial de Zelta