---
title: "Grade a full cold-email draft across 8 deliverability/effectiveness dimensions"
method: POST
path: "/api/v1/analyze/cold-email"
tags: ["Analyze"]
---

# Grade a full cold-email draft across 8 deliverability/effectiveness dimensions

`POST /api/v1/analyze/cold-email`

## Request

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

Local rule-based analysis (subject line, personalization, value proposition, CTA, length, tone, research signals, spam triggers) with an optional AI pass layered on top, returning a 0-100 score, letter grade, per-check detail, and per-dimension metrics. 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`

Cold email grade and analysis.

- ColdEmailAnalysisResult
  - `score` number, required
  - `grade` 'A' | 'B' | 'C' | 'D' | 'F', required
  - `checks` object[], required
    - `label` string, required
    - `passed` boolean, required
    - `detail` string, required
    - `scoreImpact` number, required
  - `strengths` string[], required
  - `weaknesses` string[], required
  - `improvements` string[], required
  - `metrics` object, required
    - `clarity` number
    - `personalization` number
    - `valueProp` number
    - `cta` number
    - `tone` number
  - `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)
