Before you start
- Plan — Alerts require a Team, Business, or Enterprise plan. On a plan that doesn’t include them, the create call returns
plan_does_not_support_alerts. - API key — Alerts CRUD works with a standard
X-API-Key. Create one on the . Your key is bound to a project, and the create endpoint is project-scoped — pass that same project’s ID in the path. - A notification email — Matches are delivered by email to a verified address. Auto-verification works for dashboard users; API-key callers must use an address that’s already verified for the organization. See Notification emails.
Create from the dashboard
Choose what triggers the alert
Pick Any mention — notify whenever the entity is mentioned — or Speaker appearance — notify only when the entity is themself a speaker on the episode (guest, panelist, correspondent, or audience). The trigger is fixed once the alert is created.

Pick the entity and delivery frequency
Search for the entity to watch — the field is labelled Person to watch for a speaker-appearance alert — and choose a Delivery frequency: As it happens, Daily digest, or Weekly digest.



Create with the API
1. Resolve the entity
An alert watches entities by canonical ID, not by name. Resolve the entity first, then use itsid as the entity_id. entity_type is one of PERSON, COMPANY, or KNOWLEDGE_GRAPH_ENTITY:
entity_type | Resolve with | Use as entity_id |
|---|---|---|
COMPANY | GET /v1/companies/{id} | the company’s id |
KNOWLEDGE_GRAPH_ENTITY | GET /v1/entities/{id} | the entity’s id (people, organizations, places, and topics in the knowledge graph) |
PERSON | a Particle person record, e.g. a resolved podcast guest | the person’s id |
2. Preview match frequency (optional)
Before you commit, run a preview to see how often the alert would have fired over the pastwindow_days days (default 7, max 30). The sweep is asynchronous, and the POST returns only status fields (preview_id, status, window_days) — never the counts. A fresh sweep returns 202 Accepted with status: "in_progress"; poll GET /v1/alerts/preview/{previewId} until status is terminal (completed or failed), then read total_matches, by_day, and sample from that GET response. If an identical preview ran within the past hour, the POST returns 200 OK with status: "completed" instead — the result is ready, so a single GET retrieves it without a polling loop.
Response (202 Accepted)
Response (200 OK)
total_matches is the count over the whole window; by_day is the per-day histogram (empty days included so a chart has no gaps); sample is the few most-recent matches with full payload so you can show “here’s what it would have caught.” Preview IDs are deterministic — repeating the same body within the hour returns the same preview_id and a cached result, so polling is cheap.
If the sweep errors, the same endpoint returns status: "failed" with a human-readable error string instead of counts — treat failed as terminal alongside completed and stop polling. Previews are retained for one hour; an expired preview_id returns 404.
3. Create the alert
POST the configuration to the project-scoped endpoint. The body sets the title, kind, delivery cadence, the entities to watch, and one or more email channels.
Response (200)
created_by field is omitted here because the request authenticated with an API key; it’s populated with the creating user only for alerts created by a signed-in dashboard user.
To alert on a person’s appearances rather than mentions, set kind to PODCAST_SPEAKER and watch a person entity — either a PERSON record or the person’s knowledge-graph entity. This fires only when the person is an identified speaker on the episode — a guest, panelist, correspondent, or audience member — not when they’re merely talked about.
kindis fixed at creation. Switching mention vs appearance later would invalidate the match history, so create a new alert instead.delivery_cadencedefaults toREALTIME. UseDAILYorWEEKLYfor bundled digest emails — see Delivery frequency.is_activedefaults totrue. Passfalseto create the alert paused: it won’t match new episodes or send email going forward, and it doesn’t count against your plan’s allowance until enabled. The one-time creation backfill still runs, so a paused alert can still show up to 7 days of historical (backfilled) matches.- A new alert is backfilled. Right after creation — even if you create it paused — Particle sweeps the past 7 days so the alert isn’t empty. Backfilled matches never send email — see Alert results → Backfill.
Notification emails
Every email channel must be verified for your organization before it receives mail. What gets verified automatically depends on how you authenticate:- Dashboard / logged-in users — your own address and any address belonging to a member of your organization are verified automatically the first time you use them.
- API-key callers — an API key carries no user identity, so nothing is auto-verified. The address must already be verified for the organization (verify it once from the dashboard, or through the verification-link flow); otherwise the create or update call returns
email_verification_required. - Any third-party address must confirm a one-time verification link before it receives mail.
notification_email_in_use — remove it from the alert’s notifications first.
Update, pause, and delete
PATCH /v1/alerts/{id} applies a partial update. Only the fields you send change — but entities and notifications, when present, replace the whole set (they aren’t merged).
Errors
| Error | When |
|---|---|
plan_does_not_support_alerts | The organization’s plan doesn’t include alerts. |
add_on_required | Plan’s included alert allowance is reached. Buy an Alerts Pack. |
email_verification_required | A third-party notification email hasn’t confirmed its link. |
validation_error | Malformed entity_id (e.g. a slug where a canonical PERSON/COMPANY ID is required), unknown kind, or an EMAIL channel with no address. |
Related
- Alerts overview — concepts, alert kinds, and the plan requirement
- Alert results — read the matches and deliveries an alert produces
- Knowledge graph → entities — resolve people, companies, and topics to watch

