Part of Cipher  ›

Cipher, inside your own forms

Score every response for bots, rushing, copying and AI writing from your own stack. Install the package, add a key, and get your first score in minutes.

$ pnpm add @surbee/cipher
quickstart.ts
import { Cipher } from '@surbee/cipher'

const cipher = new Cipher({ apiKey: process.env.CIPHER_API_KEY })

// Score your first survey response
const result = await cipher.validate({
  responses: [
    { question: 'Would you recommend us?', answer: 'Yes' },
  ],
  behavioralMetrics: tracker.getMetrics(),
})

console.log(result.score)          // 0.94
console.log(result.recommendation) // 'keep'

103µs

to score a whole response with the in-house checks

$0.002

per response with AI-text detection, the first tier with AI checks

$0.05

per response with every Cipher check switched on

What you can do with Cipher SDK

Core API

Validate any response

Pass survey responses with behavioral metrics. Get instant quality scores, recommendations, and detailed check results.

validate.ts
const result = await cipher.validate({
  responses: submission.responses,
  behavioralMetrics: tracker.getMetrics(),
})

result.score          // 0.94
result.recommendation // 'keep'

Configuration

Tune tiers and thresholds

Pick a validation tier from 1 to 5 and set your own score thresholds for auto-reject and review. Higher tiers add AI-content, VPN, and fraud-ring checks.

config.ts
const cipher = new Cipher({
  apiKey: process.env.CIPHER_API_KEY,
  tier: 4,
  thresholds: { fail: 0.4, review: 0.7 },
})

Advanced

Batch and fraud-ring detection

Validate many responses in one call. Turn on cross-respondent analysis (tier 5) to surface coordinated fraud rings across the whole batch.

batch.ts
const batch = await cipher.validateBatch({
  submissions,
  crossAnalysis: true, // tier 5
})

batch.summary.avgScore
batch.fraudIndicators?.fraudRingScore

Lightweight tiers

Fast checks, no AI

Tiers 1 and 2 are free. They run the behavioral, timing, device, and content checks with no AI models, so they return in milliseconds.

lightweight.ts
const cipher = new Cipher({
  apiKey: process.env.CIPHER_API_KEY,
  tier: 2, // rule-based, no AI
})

// Fast, server-side, no AI latency
const result = await cipher.validate({
  responses: submission.responses,
  deviceInfo: tracker.getDeviceInfo(),
})

FAQ

Billing, keys and what runs where.

Pay as you go. You top up prepaid API credits in the developer console and each scored response draws from them. Credits never expire, and there is no plan to buy.

The lightweight tiers run in-house with no AI calls, in microseconds. The higher tiers add AI checks for written answers and cost a little more per response.

Yes. The SDK runs the same engine and the same checks that score every Surbee survey, through an adapter for your own forms.

From the developer console at platform.surbee.dev, where you also see usage, top up credits and manage billing.

Ready to screen your first response?

Pay only for what you screen, with credits that never expire.