Formend
Overview

Formend API

Formend continuously evaluates customer support conversations, identifies operational risks, scores interactions, and escalates failures to supervisors in real time.

The API is REST-based, returns JSON, and authenticates via Bearer token. A developer with an API key can send a conversation and receive a risk assessment in under 300ms.

BASE URLhttps://api.formend.tech/v1

Authentication

API Keys

All requests require a Bearer token in the Authorization header. Your API key is issued when you subscribe and can be found in your welcome email.

Header
Authorization: Bearer YOUR_API_KEY
cURL
curl -X POST https://api.formend.tech/v1/analyze \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"conversation_id":"conv_001"}'
JavaScript
const res = await fetch("https://api.formend.tech/v1/analyze", { method: "POST", headers: { "Authorization": `Bearer ${YOUR_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ conversation_id: "conv_001" }), });
Python
import requests response = requests.post( "https://api.formend.tech/v1/analyze", headers={"Authorization": f"Bearer {YOUR_API_KEY}"}, json={"conversation_id": "conv_001"} )

Key rotation

To rotate your API key, contact hello@formend.tech. Enterprise clients can request programmatic key management.


Endpoint

Analyze Conversation

The primary endpoint. Send a customer message and agent response — Formend returns a risk score, status, and any identified issues.

POST/v1/analyze

Request

JSON
{ "conversation_id": "conv_123", "agent_id": "agent_456", "customer_message": "My order still hasn't arrived after 3 weeks.", "agent_response": "Please allow another 48 hours for delivery." }
FieldTypeRequiredDescription
conversation_idstringYesUnique identifier for the conversation
agent_idstringNoAgent identifier for tracking purposes
customer_messagestringYesThe customer's inbound message
agent_responsestringYesThe agent's reply to evaluate

Response

JSON
{ "conversation_id": "conv_123", "score": 74, "status": "warning", "issues": [ "Customer frustration not acknowledged" ], "escalate": false }
FieldTypeDescription
scoreinteger0–100. Lower scores indicate higher risk.
statusstringok · warning · critical
issuesarrayList of identified issues. Empty if none.
escalatebooleanWhether a supervisor alert has been triggered.

Endpoint

Batch Analysis

Submit multiple conversations in a single request. Designed for historical ticket reviews, CRM imports, and Zendesk exports.

POST/v1/analyze/batch
Request
{ "conversations": [ { "conversation_id": "conv_001", "agent_id": "agent_01", "customer_message": "Where is my order?", "agent_response": "I'll look into this now." }, { "conversation_id": "conv_002", "agent_id": "agent_02", "customer_message": "This is unacceptable.", "agent_response": "Please check our help centre." } ] }
Response
{ "results": [ { "conversation_id": "conv_001", "score": 88, "status": "ok", "escalate": false }, { "conversation_id": "conv_002", "score": 41, "status": "critical", "escalate": true } ], "processed": 2, "failed": 0 }

Maximum batch size is 100 conversations per request.


Webhooks

Webhook Configuration

Formend can POST event payloads to any HTTPS endpoint you control. To register a webhook, contact hello@formend.tech with your endpoint URL.

Supported events

EventDescription
analysis.completedA conversation has been scored successfully.
analysis.failedA conversation could not be processed.
escalation.createdA supervisor alert has been triggered.
escalation.closedA supervisor has marked an escalation resolved.

Example payload

POST to your endpoint
{ "event": "escalation.created", "conversation_id": "conv_123", "risk_level": "high", "score": 42, "reason": "Policy violation", "timestamp": "2026-05-28T14:32:01Z" }

All webhook requests include a X-Formend-Signature header for payload verification. Respond with HTTP 200 to acknowledge receipt.


Errors

Error Handling

All errors return a JSON object with an error field and an appropriate HTTP status code.

StatusErrorDescription
401invalid_api_keyAPI key is missing or invalid.
422missing_required_fieldA required field is absent from the request.
429rate_limit_exceededMonthly analysis limit reached for your tier.
500internal_errorAn unexpected error occurred. Contact support.
Error response
{ "error": "rate_limit_exceeded", "message": "Monthly limit of 3,000 analyses reached.", "tier": "starter" }

Limits

Rate Limits

Limits are applied per billing cycle. When the monthly limit is reached, the API returns a 429 rate_limit_exceeded response.

PlanMonthly analysesPer-minute limit
Starter3,00010 / min
Growth12,00030 / min
EnterpriseCustomCustom

To upgrade your plan or discuss enterprise volume, contact info@formend.tech.