---
title: "Check a drafted message for deliverability risks"
method: POST
path: "/sequences/spam-check/"
tags: ["sequences"]
---

# Check a drafted message for deliverability risks

`POST /sequences/spam-check/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/sequences/spam-check/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Rule-based findings on the given subject and body: risky phrases, link density, shouting, punctuation, length, and for an email the variables, emoji and blanks left from a starter, with what passes. The text is the composer's: {{Column}} is a variable and {{spin: a | b}} a rotation. Deterministic and free; pure text analysis, nothing is stored.

## Request body

- SpamCheckRequestSchema: The drafted text to analyse: pure text in, findings out.
  - `body` string
  - `opens_thread` boolean: Whether the email starts a thread of its own. A first email is held to a cold email's length, 25 to 200 words; a reply in a thread may be short. Read for an email only.
  - `scope` 'email' | 'signature': What kind of text the deliverability check is reading. The rules are not all portable. Length is the one that isn't: a cold email under eight words really is a filter pattern, and a signature is ALWAYS under eight words (a name and a role is four). Run the email rules over a signature and every sender is told to pad theirs into "a sentence of substance", directly contradicting the guidance printed above the box that tells them to keep it to a name, a role, and one link. Everything else (trigger phrases, link density, shouting, punctuation) means the same thing wherever the text ends up, and runs for both.
  - `subject` string

## Response `200`

Successful Response

- SpamCheckResponseSchema
  - `findings` SpamFindingReadSchema[], required
    - `code` string, required
    - `detail` string, required: The evidence: "3 in the message. One is safest, two at most."
    - `excerpt` string, nullable
    - `excerpts` string[]: Every piece of text the finding is about; excerpt is the first.
    - `message` string, required: Title and detail as one sentence, for a single line.
    - `severity` string, required: warning (likely hurts) or info (worth knowing).
    - `title` string, required: The problem, named: "Too many links".
  - `passes` string[]: What an email passes, each with its value: "2 variables", "75 words", "No links", "1 emoji". Empty for a signature, and for an email with nothing in it yet.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
