Connect Ukta to the systems that already run the work

A clean REST API and webhooks instead of prebuilt connectors. Pass feedback context to and from your POS, CRM, and email flows with scoped keys and one-time links.

Token request200 OK
POST /api/external/token
x-api-key: nk_a1b2...
{
  "storeSlug": "downtown-coffee",
  "payload": {
    "orderId": "ORD-12345",
    "civ": "CUST-7891"
  }
}

civ is the Customer Identification Value. It ties this feedback to a returning customer so the dashboard can show loyalty trends over time.

Three ways teams put Ukta into motion

POS-triggered links

Call our API from your POS to create a survey link automatically when an order closes.

CRM context

Attach order IDs, account fields, and customer context to each response, then pull it back via API or webhook.

Email flows

Send one-time feedback links in post-purchase sequences.

Three steps from key to insight

01

Authenticate

Create a scoped API key for the whole workspace or one store.

Authorization: Bearer nk_live_5893...
x-workspace-id: 1042
02

Generate

Request a one-time token with metadata, including an optional civ to identify the customer across future visits.

POST /api/external/token
storeSlug: downtown-coffee
orderId:  ORD-12345
civ:      CUST-7891
03

Receive

Search, filter, and export feedback using the context you passed in.

5-star feedback
ORD-12345
Source: POS

Know whether your regulars are getting a better experience

A single opaque string (a loyalty ID, phone hash, or account number) passed from your POS or billing software connects each piece of feedback to a real customer. Ukta never stores PII; it stores only the value you send, which means the data stays useful without introducing compliance risk.

Confirm loyalty is paying off

Are the improvements you ship actually landing with repeat customers? The dashboard compares first-visit and return-visit ratings side by side, so you can answer with data instead of instinct.

Catch declining regulars early

A loyal customer who starts rating 3 stars after years of 5 is a churn signal, not a random outlier. CIV-linked tracking surfaces it before it becomes a lost customer.

Measure return rate, not just volume

High feedback volume can hide low retention. CIV shows what share of identified customers came back, a truer signal of experience quality than raw counts.

Option A: embed at token generation

Ideal for POS and billing integrations that generate the survey link at checkout. Pass civ inside the payload when requesting a token. Ukta extracts and indexes it automatically when the customer submits.

POST /api/external/token
x-api-key: nk_a1b2...

{
  "storeSlug": "downtown-coffee",
  "payload": {
    "orderId": "ORD-12345",
    "civ":     "CUST-7891"   // loyalty ID / phone hash
  }
}

The customer sees a normal survey link. The civ travels with the token and is stored when they submit; no extra step is needed on the survey side.

Option B: pass at submission

For integrations that submit feedback directly, bypassing the survey UI, include civ as a top-level field alongside the rating. Works with both one-time tokens and reusable campaign tokens.

POST /api/external/public/submit

{
  "token":   "tkn_xyz...",
  "rating":  5,
  "comment": "Great service as always.",
  "civ":     "CUST-7891"   // same ID, any path
}

If both the token payload and the submit body carry a civ, the submit body value takes precedence. That is useful when the customer authenticates at survey time rather than at checkout.

What appears on the dashboard once CIV data flows in

Return rate

What share of identified customers submitted feedback more than once in the selected period.

First visit vs return visit

Side-by-side avg rating and CSAT % for customers on their first submission vs those who have returned.

Loyalty signal

Automatic classification: returning customers rating you higher, lower, or consistently, with the exact delta displayed.

Bring feedback into the workflow instead of bolting it on later

Use secure APIs and tracked links to keep customer context intact from trigger to response.

Get API keys