---
title: "Ingest a project signal"
method: POST
path: "/signals"
tags: ["signals"]
---

# Ingest a project signal

`POST /signals`

## Request

- Base URL: `https://eu.bisibility.com/api/v1`
- URL: `https://eu.bisibility.com/api/v1/signals`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `/api/auth/oauth2/authorize`, token URL `/api/auth/oauth2/token`, scopes: `api:write`)

## Query parameters

- `project` string

## Headers

- `Bisibility-API-Version` 'v1'
- `X-Bisibility-Project` string
- `X-Bisibility-Source` 'sdk' | 'cli' | 'mcp'

## Request body

- SignalCreate
  - `happened_at` string, date-time: ISO-8601 date-time when the signal happened. Defaults to now.
  - `keyword_id` string
  - `payload` object: JSON object payload. Ingestion rejects serialized payloads above 8KB.
  - `severity` 'info' | 'warning' | 'critical'
  - `source` 'deploy' | 'cms' | 'api', required
  - `type` string, required
  - `url` string, uri

## Response `201`

Signal ingested

- Signal
  - `created_at` string, date-time, required
  - `happened_at` string, date-time, required
  - `id` string, required
  - `keyword_id` string, nullable, required
  - `payload` object, nullable, required: JSON object payload. Ingestion rejects serialized payloads above 8KB.
  - `project_id` string, required
  - `public_id` string, required
  - `severity` 'info' | 'warning' | 'critical', required
  - `source` 'rank_tracker' | 'search_analytics' | 'url_inspection' | 'sitemap' | 'deploy' | 'cms' | 'search_engine_status' | 'manual' | 'api', required
  - `type` string, required
  - `url` string, uri, nullable, required

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Unsupported API version
- `423`: Project read-only
- `429`: Rate limited

## Changes

- **2026-10-19** `a6e1ec0dec82`: 7 info
  - the endpoint scheme security `AppOAuth` was added to the API
  - media type `application/json` was changed to a more specific media type `application/problem+json` for the response status `400`
  - media type `application/json` was changed to a more specific media type `application/problem+json` for the response status `401`
  - media type `application/json` was changed to a more specific media type `application/problem+json` for the response status `403`
  - …3 more

[Operation history](https://skmtc.dev/bisibility/apis/bisibility-public-api/changes/signals/post.md)

---

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