> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.resemble.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.resemble.ai/_mcp/server.

# Signal

The Signal API scores a piece of content — text, audio, image, or video — against a set of fraud and scam categories and returns a verdict along with the best-matching categories. Use it to triage suspicious messages, voicemails, and media, and to explain *why* something looks fraudulent.

Signal ships with a built-in catalog of fraud patterns. Teams can extend or replace that catalog with their own [custom categories](/detect/signal/custom-categories) built from example phrases.

## Base URL

`https://app.resemble.ai/api/v2`

Send `Content-Type: application/json` for text and JSON bodies, and `multipart/form-data` for file uploads.

## Access

Signal requires an account with Signal enabled. Requests from accounts without access return:

```json
{
  "success": false,
  "message": "Signal access is required"
}
```

All calls are scoped to the authenticated user's team automatically.

## Verdicts

Every submission returns one of three verdicts:

| Verdict      | Meaning                                                             |
| ------------ | ------------------------------------------------------------------- |
| `safe`       | No meaningful match against any fraud category.                     |
| `suspicious` | Matched a fraud category, but not strongly enough to be conclusive. |
| `fraud`      | Strong match against one or more fraud categories.                  |

The verdict is accompanied by the highest-scoring category, the runner-up categories, and the individual example phrases that matched — see [Score Content](/detect/signal/score) for the full response shape.

## Supported input

| Input | How to send it              | Limits |
| ----- | --------------------------- | ------ |
| Text  | `text` field in a JSON body | —      |
| Audio | `file` in a multipart body  | 15 MB  |
| Image | `file` in a multipart body  | 15 MB  |
| Video | `file` in a multipart body  | 15 MB  |

Provide either `text` or `file` in a request, not both. The media type is detected from the uploaded file's MIME type, and can be overridden with `media_type`.

## Endpoints

| Method   | Path                             | Purpose                                                                        |
| -------- | -------------------------------- | ------------------------------------------------------------------------------ |
| `POST`   | `/signal`                        | [Score](/detect/signal/score) text or a media file                             |
| `GET`    | `/signal`                        | [List](/detect/signal/list) past submissions                                   |
| `DELETE` | `/signal/{id}`                   | [Delete](/detect/signal/delete) a submission                                   |
| `GET`    | `/signal/custom_categories`      | [List categories](/detect/signal/custom-categories), settings, and calibration |
| `POST`   | `/signal/custom_categories`      | [Create](/detect/signal/custom-categories) a custom category                   |
| `GET`    | `/signal/custom_categories/{id}` | [Get](/detect/signal/custom-categories) a custom category                      |
| `PATCH`  | `/signal/custom_categories/{id}` | [Update](/detect/signal/custom-categories) a custom category                   |
| `DELETE` | `/signal/custom_categories/{id}` | [Delete](/detect/signal/custom-categories) a custom category                   |
| `PATCH`  | `/signal/settings`               | [Toggle](/detect/signal/settings) the built-in categories                      |