Connect SpaceKru with Zapier, Make & n8n

Zapier, Make and n8n connect SpaceKru to thousands of apps through their built-in webhook and HTTP tools. Sending data INTO SpaceKru is point-and-click; receiving SpaceKru events needs one extra request, which this guide gives you ready to copy.

The SpaceKru API (v1.1) is a REST/JSON API available on every paid SpaceKru plan. It syncs leads both ways (upsert by external_id), adds leads to campaigns, creates and moves deals and asks AI Employees to follow up, manages products, quotes, orders, payments and bookings, lets your platform chat with your Customer Service AI Employee, and sends signed webhooks for 16 events that say who caused each change. Base URL: https://app.spacekru.com/api/public/v1. Authentication: Bearer API key (sk_live_…). Documentation: https://www.spacekru.com/developers (Spanish: https://www.spacekru.com/es/developers). OpenAPI 3.1: https://app.spacekru.com/api/public/v1/openapi.json.

Leer en español

Before you start

  • A SpaceKru account on a paid plan (the 7-day free trial works).
  • An API key with Read & write access, created by the account owner in Integrations → API & Webhooks. Name it after the tool ("Zapier", "Make", "n8n").
  • The API base URL: https://app.spacekru.com/api/public/v1.

Two directions

DirectionExampleHow
Into SpaceKruNew form response → lead in SpaceKruAn HTTP step in your tool calls POST /leads with your key. No code.
Out of SpaceKruNew lead in SpaceKru → row in Google SheetsYour tool gives you a webhook URL; you register it once with POST /subscriptions; SpaceKru calls it on every event.

Zapier

Send leads into SpaceKru

  1. Trigger. Choose the app where leads come from (Typeform, Google Forms, Facebook Lead Ads, Shopify, a spreadsheet…).
  2. Action: Webhooks by Zapier → POST. URL: https://app.spacekru.com/api/public/v1/leads. Payload Type: json. Headers: Authorization → Bearer sk_live_… (your key).
  3. Data. One row per field: full_name, work_email, work_phone, company_name, city, country, tags… At least one email, phone or social profile is required. Unmapped or empty fields are ignored.
  4. Test. A 201 response means the lead was created. 409 DUPLICATE_RESOURCE means it already existed (the response includes its existing_id).

Field names and limits: Create a lead. tags can be a comma-separated text such as zapier, webinar.

React to SpaceKru events

  1. Trigger: Webhooks by Zapier → Catch Hook. Copy the URL Zapier gives you (https://hooks.zapier.com/hooks/catch/…).
  2. Register the URL once. Run this request once, replacing the URL and choosing the event (lead.created, lead.updated, deal.created, deal.stage_changed, deal.updated, quote.created, quote.status_changed, order.created, order.status_changed, campaign_lead.replied, campaign_lead.form_submitted, product.created, product.updated, booking.created, booking.updated, conversation.message_created). Use a terminal, any HTTP tool (Postman, Insomnia), or a temporary Zap with a Webhooks by Zapier → POST step. Save the secret from the response.
    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)
  3. Send a sample. Make the event happen in SpaceKru (for lead.created, create a lead). Zapier receives it and shows every field: event, data.full_name, triggered_by, changes…
  4. Build the rest of the Zap. Add your actions (Google Sheets, Slack, HubSpot, Gmail…) and publish.

Make

Send leads into SpaceKru

  1. Module: HTTP → Make a request. URL: https://app.spacekru.com/api/public/v1/leads. Method: POST. Headers: Authorization = Bearer sk_live_….
  2. Body. Body type: Raw. Content type: JSON (application/json). Request content: the JSON of the lead, mapping your trigger's fields, e.g. {"full_name": "{{1.name}}", "work_email": "{{1.email}}", "tags": ["make"]}.
  3. Parse response. Turn on Parse response to use the new lead's id in later modules.

React to SpaceKru events

  1. Add Webhooks → Custom webhook as the first module and copy its address (https://hook.<region>.make.com/…).
  2. Register the address once with the request above (POST /subscriptions).
  3. Make the event happen in SpaceKru so Make learns the data structure, then add your modules.

n8n

Send leads into SpaceKru

  1. Create a credential of type Header Auth: Name Authorization, Value Bearer sk_live_….
  2. Add an HTTP Request node: Method POST, URL https://app.spacekru.com/api/public/v1/leads, Authentication → Generic Credential Type → Header Auth (the credential above).
  3. Turn on Send Body, Body Content Type JSON, and map the fields.

React to SpaceKru events

  1. Add a Webhook node with HTTP Method POST and copy its Production URL (not the Test URL).
  2. Activate the workflow — the production URL only listens while the workflow is active.
  3. Register the production URL once with POST /subscriptions.
  4. Self-hosted n8n must be reachable at a public https:// address on port 443: localhost, private IPs and internal hostnames are rejected.

Troubleshooting

SymptomLikely cause
401 INVALID_API_KEYThe header is not exactly Authorization: Bearer sk_live_… (a missing "Bearer ", an extra space or quote), or the key was revoked.
402 PLAN_UPGRADE_REQUIREDThe SpaceKru account is not on an active paid plan.
403 INSUFFICIENT_SCOPEThe key is Read only. Creating leads and webhooks needs Read & write.
400 "Unknown field(s)"A field name that doesn't exist (e.g. email instead of work_email). See the field list in the reference.
400 "At least one contact channel is required"The trigger produced an empty email/phone. Add a filter so only complete responses continue.
No events arriveThe subscription was registered with another URL, or it was deactivated (check Integrations → API & Webhooks). Only events that happen after subscribing are sent.
Events stopped arrivingThe URL kept failing (20 failed attempts in a row) or answered 410. Delete the subscription and create it again with a working URL.

More detail on every code: Errors.