Casos de uso
Doce integraciones que los clientes de SpaceKru arman con la API, cada una con su flujo, los pasos exactos y sus límites reales. Las cinco primeras conectan tu propia plataforma; el resto no necesitan código con Zapier, Make o n8n.
La API de SpaceKru (v1.1) es una API REST/JSON disponible en todos los planes de pago de SpaceKru. Sincroniza leads en ambos sentidos (upsert por external_id), añade leads a campañas, crea y mueve deals y pide seguimientos a los Empleados de IA, gestiona productos, cotizaciones, órdenes, pagos y reservas, permite que tu plataforma converse con tu Empleado de IA de Customer Service y envía webhooks firmados para 16 eventos que dicen quién causó cada cambio. URL base: https://app.spacekru.com/api/public/v1. Autenticación: llave de API Bearer (sk_live_…). Documentación: https://www.spacekru.com/es/developers. OpenAPI 3.1: https://app.spacekru.com/api/public/v1/openapi.json.
1. Cliente atendido en persona → lead en una campaña de seguimiento
Tu punto de venta o sistema de recepción crea el lead y, en la misma solicitud, lo pone en una campaña de prospección o recontacto: el Empleado de IA de la campaña le hace seguimiento solo.
Cliente en el mostrador → Tu POS → POST /leads + campaign_id → El Empleado de IA hace seguimiento
- Elige la campaña.
GET /campaigns?type=prospectingy guarda elidde una campaña conenrollable: true. - Crea el lead con campaign_id. Envía
external_id(el id del cliente en tu POS) para no necesitar nunca el id de SpaceKru.curl curl -X POST "https://app.spacekru.com/api/public/v1/leads" \ -H "Authorization: Bearer $SPACEKRU_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: typeform-resp-8f2a1c" \ -d '{ "full_name": "Laura Gomez", "work_phone": "+573001112233", "external_id": "pos-88412", "campaign_id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8", "tags": [ "walk-in" ] }'Node.js const res = await fetch('https://app.spacekru.com/api/public/v1/leads', { method: 'POST', headers: { Authorization: `Bearer ${process.env.SPACEKRU_API_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': 'typeform-resp-8f2a1c', }, body: JSON.stringify({ "full_name": "Laura Gomez", "work_phone": "+573001112233", "external_id": "pos-88412", "campaign_id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8", "tags": [ "walk-in" ] }), }); const body = await res.json(); if (!res.ok) { // Branch on body.error.code; quote body.error.request_id to support. throw new Error(`${body.error.code}: ${body.error.message} (request ${body.error.request_id})`); } console.log(body);Python import os import requests r = requests.post( "https://app.spacekru.com/api/public/v1/leads", headers={ "Authorization": f"Bearer {os.environ['SPACEKRU_API_KEY']}", "Idempotency-Key": "typeform-resp-8f2a1c", }, json={ "full_name": "Laura Gomez", "work_phone": "+573001112233", "external_id": "pos-88412", "campaign_id": "4e5f6a7b-8c9d-4e0f-a1b2-c3d4e5f6a7b8", "tags": ["walk-in"], }, timeout=30, ) body = r.json() if not r.ok: # Branch on body["error"]["code"]; quote body["error"]["request_id"] to support. raise RuntimeError(f"{body['error']['code']}: {body['error']['message']} (request {body['error']['request_id']})") print(body) - Lee el resultado. La respuesta trae
enrollment.status:enrolled,already_in_campaignoexcludedcon unreason(no_contact,no_channel_match,email_unverified).
2. Sincronización en ambos sentidos con tu CRM o plataforma
Un lead editado en tu plataforma actualiza SpaceKru, y un lead editado en SpaceKru (por tu equipo o un Empleado de IA) actualiza tu plataforma, sin bucles de eco.
Tu plataforma → PUT /leads/external/{id} → SpaceKru → lead.updated (triggered_by: app) → Tu plataforma
- Escribe con
PUT /leads/external/{external_id}: crea, actualiza o adopta el lead. - Suscríbete a
lead.createdylead.updatedconexclude_own_changes: true. - En cada webhook, actualiza tu registro por
data.external_id(o guardadata.idla primera vez).
La receta completa: Sincronización en ambos sentidos.
3. Tu Empleado de IA dentro de tu app o sitio web
Tus clientes escriben en tu app; tu Empleado de IA de Customer Service responde con todo lo que puede hacer en WhatsApp: cotizar, agendar, consultar el catálogo y la base de conocimiento, o llamar a una persona.
El cliente escribe en tu app → POST /conversations/{id}/messages → El Empleado de IA responde → Tu app muestra la respuesta
Requisitos, ciclo de vida y costos: Conversaciones con IA.
4. Catálogo y stock desde tu e-commerce o ERP
Tus Empleados de IA cotizan y venden con los precios y el stock de tu catálogo real.
- Crea cada producto una vez con
POST /productsy tuexternal_id(el id de tu SKU). - Cuando cambie el precio o el stock en tu sistema, envía
PATCH /products/{id}(oPATCH /products/{id}/variants/{variant_id}para una variante). - Escucha
product.updatedpara traer el stock que SpaceKru descuenta al crear órdenes.
5. Reservas desde tu sitio o sistema de reservas
GET /availability → El cliente elige un horario → POST /bookings → booking.created
GET /availability?date=2026-10-24&party_size=4devuelve los horarios libres en la zona horaria del negocio.POST /bookingscon elresource_idy la hora del horario. Un horario ocupado responde409 SLOT_UNAVAILABLE.- Las reservas que tus Empleados de IA hacen por WhatsApp te llegan como
booking.created.
6. Sitio web o Typeform → lead en SpaceKru
Cada respuesta de un formulario se vuelve un lead de SpaceKru en segundos, sin duplicados.
Respuesta del formulario → Zapier / Make / n8n → POST /leads → Lead en SpaceKru
- Crea una llave de API. En SpaceKru → Integraciones → API y Webhooks, crea una llave de Lectura y escritura. Llámala "Zapier — formularios".
- Disparador. En Zapier, usa el disparador de tu herramienta de formularios, por ejemplo Typeform → New Entry.
- Acción. Añade Webhooks by Zapier → POST. URL:
https://app.spacekru.com/api/public/v1/leads. Payload Type: json. Header:Authorization=Bearer <tu llave>. - Mapea los campos. En Data, añade
full_name,work_email,work_phoneytags(sirve un valor separado por comas comotypeform, promo). Los campos vacíos se ignoran. - Actívalo. Pruébalo una vez y publícalo. Si la persona ya existe, SpaceKru responde
409conexisting_iden vez de crear un duplicado.
7. Lead nuevo en SpaceKru → contacto en HubSpot (o cualquier CRM)
Cada lead nuevo, de WhatsApp, Instagram, formularios, importaciones CSV o el Lead Finder, llega a tu otro CRM en segundos.
Lead nuevo en SpaceKru → lead.created → Zapier Catch Hook → Contacto en HubSpot
- Catch Hook. En Zapier, crea un Zap con el disparador Webhooks by Zapier → Catch Hook y copia su URL.
- Registra el webhook una vez. Ejecuta esta solicitud una vez con tu llave y la URL del Catch Hook. Guarda el
secretque devuelve.curl curl -X POST "https://app.spacekru.com/api/public/v1/subscriptions" \ -H "Authorization: Bearer $SPACEKRU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "event_type": "lead.created", "target_url": "https://hooks.zapier.com/hooks/catch/1234567/abcdefg/" }'Node.js const res = await fetch('https://app.spacekru.com/api/public/v1/subscriptions', { method: 'POST', headers: { Authorization: `Bearer ${process.env.SPACEKRU_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "event_type": "lead.created", "target_url": "https://hooks.zapier.com/hooks/catch/1234567/abcdefg/" }), }); const body = await res.json(); if (!res.ok) { // Branch on body.error.code; quote body.error.request_id to support. throw new Error(`${body.error.code}: ${body.error.message} (request ${body.error.request_id})`); } console.log(body);Python import os import requests r = requests.post( "https://app.spacekru.com/api/public/v1/subscriptions", headers={ "Authorization": f"Bearer {os.environ['SPACEKRU_API_KEY']}", }, json={ "event_type": "lead.created", "target_url": "https://hooks.zapier.com/hooks/catch/1234567/abcdefg/", }, timeout=30, ) body = r.json() if not r.ok: # Branch on body["error"]["code"]; quote body["error"]["request_id"] to support. raise RuntimeError(f"{body['error']['code']}: {body['error']['message']} (request {body['error']['request_id']})") print(body) - Mapea a HubSpot. Añade HubSpot → Create or Update Contact y mapea
data.work_email,data.full_name,data.work_phoneydata.company_name.
8. Deal ganado → mensaje en Slack
Deal marcado ganado → deal.stage_changed → Filtro: status es won → Mensaje en Slack
- Suscríbete. Suscribe una URL de Catch Hook a
deal.stage_changed. - Filtra. Continúa solo si
data.statuseswony existechanges.status. - Slack. Añade Slack → Send Channel Message: "🎉 {data.title} ganado — {data.value}".
9. Orden pagada → contabilidad o Google Sheets
Pago registrado → order.status_changed → Filtro: payment_status es paid → Fila nueva en Sheets
- Suscribe una URL de Catch Hook a
order.status_changed. - Continúa solo si existe
changes.payment_statusy su segundo valor espaid. - Añade la fila con
data.number,data.total,data.amount_paidydata.items.
10. Sincronización nocturna a tu data warehouse o ERP
Tarea programada → GET con updated_since → Sigue next_cursor → Upsert por id
- Guarda la hora en que empieza la tarea.
- Llama
GET /leads?updated_since=<última ejecución>&limit=100y siguenext_cursorhasta quehas_moreseafalse. - Haz upsert de cada registro por
id. Repite con/deals,/quotes,/orders,/productsy/bookings. - Guarda la hora de inicio como el próximo
updated_since.
El código completo está en Paginación y sincronización. Usa una llave de Solo lectura para esta tarea.
11. Respuesta en campaña → aviso al vendedor
El lead responde a una campaña → campaign_lead.replied → Tu automatización → Correo, Slack o SMS al vendedor
- Suscríbete a
campaign_lead.replied. - Envía
data.lead.full_name,data.lead.work_emailydata.campaign_idal vendedor con tu herramienta.
12. Agencias: una integración por cliente
- Cada cuenta de cliente tiene sus propias llaves (hasta 5 activas) y sus propios webhooks. Una llave solo puede ver la cuenta a la que pertenece.
- Nombra las llaves por herramienta y cliente ("Zapier — Cliente A") para que el panel te diga qué hace cada una.
- Revocar una llave detiene esa herramienta y desactiva los webhooks que creó, sin tocar nada más.