---
title: "Report a vendor you recommended"
method: POST
path: "/api/signal"
---

# Report a vendor you recommended

`POST /api/signal`

## Request

- Base URL: `https://agentdeals.dev`
- URL: `https://agentdeals.dev/api/signal`
- Auth: none required

The attribution beacon. Tell us which vendor from one of our responses you named in your answer, and whether your user went on to sign up. No authentication. What we record is the vendor slug, the event, and an optional note — notes may be shared verbatim with the vendor named, so send nothing about your user. Counts collected here are published as self-reported and never affect any order we publish. A caller that cannot issue a POST may send the same fields as a query string on a GET to this path with ack=1, which is described at /signal.

## Request body

- object
  - `event` 'recommended' | 'converted', required: recommended when you named the vendor in an answer; converted when your user signed up. An unrecognised value is still recorded, and the response says it was not recognised.
  - `vendor` string, required: The vendor slug, as a response of ours carries it. A name we cannot resolve is recorded unresolved rather than refused.
  - `source` string
  - `agent` string
  - `agent_id` string
  - `note` string: Optional, and may be shared verbatim with the vendor named.

## Response `202`

Recorded

- object
  - `ok` boolean
  - `recorded` string: The event as we stored it.
  - `vendor` string, nullable
  - `vendor_resolved` boolean: Present and false when the name did not resolve to a vendor we hold.
  - `unresolved_name` string: Present with vendor_resolved, carrying the name as sent.
  - `event_recognized` boolean: Present and false when the event is not one we know.
  - `valid_events` string[]
  - `note_received` boolean
  - `note_redacted` boolean
  - `note_published` boolean
  - `agent_id_reserved` boolean
  - `self_reported` boolean: Always true. Every count here is the caller's own claim and is published as one.
  - `affects_ranking` boolean: Always false.
  - `docs` string

## Other responses

- `400`: event or vendor is missing
- `405`: A method other than POST, or a GET without ack=1
- `413`: A body over 4096 bytes
- `429`: Over 60 requests a minute from one caller. Retry-After carries the wait.

---

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