GET /v1/surveys
List surveys in your workspace with publish status and public link slug.
Integrations
Connect KogniFeed to your CRM or event pipeline: list surveys, create personalized invite links, and check completion status — all with a workspace API key.
All endpoints are under /v1. In production this is typically your app origin plus the backend proxy path.
Send your workspace API key as a Bearer token on every request:
Authorization: Bearer kfn_…Create keys from the dashboard: Account menu → API Keys (owners and admins only).
GET /v1/surveys
List surveys in your workspace with publish status and public link slug.
POST /v1/invite-links
Create a signed ?t= URL with embedded user_data. No CRM record.
Signed URL — no CRM
{
"survey_id": "uuid",
"user_data": {
"email": "user@example.com",
"name": "Ada Lovelace",
"metadata": {
"event": "payment_not_confirmed",
"order_id": "ORD-8842",
"product": "Pro Plan (annual)",
"amount": "249 EUR",
"story": "Ada completed checkout for Pro Plan but payment was not confirmed — card authorization failed twice. Order has been on hold for 24h. Understand checkout friction and whether she still wants to upgrade."
}
},
"token_expires_days": 30,
"send_email_via_kognifeed": false
}POST /v1/crm/contacts
Upsert KogniFeed CRM contacts via a users array (1–500 per request). metadata is saved to the contact info field. Optional group_name (or group_id) applies to all contacts in the request.
Step 1 — CRM contact
{
"group_name": "Enterprise Customers",
"users": [
{
"email": "user@example.com",
"name": "Ada Lovelace",
"role": "Customer",
"phone": "+1…",
"external_id": "your-crm-id",
"metadata": {
"event": "purchase_completed",
"order_id": "ORD-99"
}
},
{
"email": "grace@example.com",
"name": "Grace Hopper",
"external_id": "crm-2"
}
]
}POST /v1/crm/invite-links
Return a ?c= link for an existing CRM contact (email or external_id). Contact must exist — use POST /v1/crm/contacts first.
Step 2 — CRM invite link
{
"survey_id": "uuid",
"email": "user@example.com",
"send_email_via_kognifeed": false
}GET /v1/invite-links
Find an existing invite link and session status (not_started, active, completed, …).
Query with survey_id plus email or external_id.