---
title: "Detect and score personalization signals in cold-email content"
method: POST
path: "/api/v1/analyze/personalization"
tags: ["Analyze"]
---

# Detect and score personalization signals in cold-email content

`POST /api/v1/analyze/personalization`

## Request

- Base URL: `https://firstsales.io`
- URL: `https://firstsales.io/api/v1/analyze/personalization`
- Auth: none required

Pattern-matches for recipient-name tokens, company references, pain-point mentions, social proof, CTA, and value proposition; layers an optional AI pass on top; returns a 0-100 score plus per-signal booleans, strengths, and suggestions. This POST is side-effect-free and safe to retry with the same body. Content must be at least 20 characters. Not rate-limited.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `content` string, required

## Response `200`

Personalization analysis.

- PersonalizationAnalysisResult
  - `score` number, required
  - `personalization` object, required
    - `recipientName` boolean
    - `companyMention` boolean
    - `painPoint` boolean
    - `socialProof` boolean
    - `cta` boolean
    - `valueProp` boolean
  - `strengths` string[], required
  - `suggestions` string[], required
  - `checks` object[], required
    - `label` string, required
    - `status` 'pass' | 'warn' | 'fail', required
    - `detail` string, required
  - `source` 'ai+local' | 'local', required

## Other responses

- `400`: Invalid request — bad input, missing field, or malformed value.
- `429`: Rate limit exceeded for this endpoint. Wait Retry-After seconds and retry.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/firstsales/apis/firstsales-public-api.md) · [All operations](https://skmtc.dev/firstsales/apis/firstsales-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/firstsales/apis/firstsales-public-api/revisions/3856191adf12?raw)
