---
title: "Score content"
method: POST
path: "/signal"
tags: ["signal"]
---

# Score content

`POST /signal`

Score a piece of content against the fraud and scam categories available to your team
and return a verdict with the best-matching categories.

Supply exactly one of:

- **Text** — `application/json` with a `text` field.
- **File** — `multipart/form-data` with the media attached as `file`. Audio, image, and
  video are supported, up to 15 MB. The media type is detected from the file's MIME type
  unless `media_type` is supplied.

## Headers

- `Authorization` string, required

## Request body

- object
  - `text` string, required — Text to analyze.

## Response `200`

Scored submission

- SignalScoreResponse
  - `success` boolean, required
  - `item` SignalScoreItem, required
    - `id` integer — Submission identifier, used with `DELETE /signal/{id}`.
    - `input_modality` 'text' | 'audio' | 'video' | 'image', required
    - `verdict` 'safe' | 'suspicious' | 'fraud', required
    - `top_category` SignalCategoryScore
      - `name` string, required
      - `icon` string, nullable — Single emoji associated with the category.
      - `score` number, double, required — Similarity score from 0 to 1.
    - `category_scores` SignalCategoryScore[] — Highest-scoring categories, including the top category.
      - `name` string, required
      - `icon` string, nullable — Single emoji associated with the category.
      - `score` number, double, required — Similarity score from 0 to 1.
    - `benign_score` number, double, nullable — How strongly the content matched benign, non-fraud content.
    - `margin_over_second` number, double, nullable — Gap between the top category score and the runner-up.
    - `examples` string[] — Sample phrases from the top category, useful for explaining the verdict.
    - `top_matches` SignalTopMatch[]
      - `category` string — Category the matched example belongs to.
      - `text` string — The individual training example that matched.
      - `score` number, double
    - `duration_seconds` number, double, nullable — Media duration for audio and video. Null for text and image.
    - `created_at` string, date-time

## Other responses

- `400` — Neither text nor file was provided, or `media_type` is invalid
- `403` — The account does not have Signal access
- `413` — File exceeds the 15 MB limit

---

[API](https://skmtc.dev/resemble/apis/api-reference.md) · [All operations](https://skmtc.dev/resemble/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/resemble/api-reference/revisions/e93597a6b425/schema)
