Warpflow
For Developers

Zapier Integration

Call the synchronous pipeline and standalone actions from automation platforms.

Authentication

Use a tenant API key in Authorization: Bearer <api_key>. See Authentication. These HTTP endpoints work with Zapier Webhooks, Make HTTP modules, n8n HTTP Request nodes, or custom backends. Custom webhooks use a separate source credential; see Webhooks.

Full Pipeline

POST /api/v1/webhook/zapier/{tenant_id}
Content-Type: application/json
Authorization: Bearer <api_key>
{
  "message": "I need a quote for a kitchen remodel. Budget is $40k.",
  "contact": { "name": "Jane Doe", "email": "jane@example.com", "phone": "+15551234567" },
  "channel": "webhook",
  "source": "zapier",
  "metadata": { "form_id": "abc123" }
}

A nonempty message is required. contact is optional and accepts name, first_name, last_name, email, and phone; channel accepts email, sms, voice, chat, or webhook and defaults to webhook. source defaults to zapier. Send message at the top level, rather than content.body.

This runs the synchronous classify → score → route → reply pipeline, subject to tenant configuration and safety gates. Response 200:

{
  "signal_id": "zapier_acme_123",
  "classification": {
    "intent": "quote_request",
    "urgency": "medium",
    "sentiment": "positive",
    "summary": "Kitchen remodel inquiry",
    "confidence": 0.92
  },
  "score": { "score": 78, "tier": "hot", "recommended_actions": ["follow_up"] },
  "matched_rules": 1,
  "actions_triggered": ["escalate"],
  "reply": {
    "text": "Thanks for reaching out. Our team can help with your quote.",
    "channel": "webhook",
    "requires_approval": true
  }
}

classification, score, and reply may be null when a step is skipped or suppressed. matched_rules is a count, and actions_triggered lists action types. A generated reply does not itself prove delivery.

Standalone actions

MethodPath
POST/api/v1/actions/zapier/{tenant_id}/score-contact
POST/api/v1/actions/zapier/{tenant_id}/classify-conversation
POST/api/v1/actions/zapier/{tenant_id}/generate-reply

These accept the same nonempty message, optional nested contact, and channel as above. They do not accept conversation history or flat contact_name fields. Responses use { "success": true, "data": { ... } } on success, and { "success": false, "error": "..." } on action failure (400).

Current limitation: The standalone action routes do not supply an LLM provider. classify-conversation and generate-reply currently return 400 with success: false and an error string starting with "LLM provider not configured". score-contact uses heuristic scoring. Use the full pipeline endpoint for configured AI classification and replies.

Usage and errors

Standalone actions check tenant usage caps and return 429 USAGE_LIMIT_REACHED or AI_LIMIT_REACHED when blocked. Invalid JSON or payload returns 400, and an unknown tenant returns 404. Usage is tracked by the action/pipeline implementation; inspect Settings → Plan & Usage in the dashboard.

Example automation

Create a tenant API key in Settings → API Keys. In Zapier, configure a Webhooks POST action to the full pipeline endpoint, map form content into message, and supply your key in the Authorization header. Branch on score.tier when score is present, or route for human review when a pipeline step is suppressed.

GHL workflow actions

POST /api/v1/actions/ghl/{action_key} dispatches a registered GHL custom workflow action. The legacy alias is POST /api/v1/actions/{action_key}. Both require a Bearer credential accepted by the application authentication middleware. The JSON body must supply extras.locationId and extras.contactId; the location must be installed and mapped to a tenant. A location ID alone does not authenticate the request. The response is action-specific; unknown actions or missing IDs return 400, missing locations/configuration return 404, and missing GHL OAuth configuration returns 503.

On this page

We use cookies to understand how you use our site and improve your experience. Privacy Policy