Notyfi trackers API
The trackers API from Notyfi — 6 operation(s) for trackers.
The trackers API from Notyfi — 6 operation(s) for trackers.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/notyfi-trackers-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Notyfi account Trackers API
version: 1.2.0
description: 'Track anything in a sentence and get notified the moment it happens -- by email, REST API, or MCP. Authenticate every request with a Notyfi API key (`Authorization: Bearer notyfi_mk_...`). Manage keys in your dashboard.'
servers:
- url: https://api.notyfi.com
security:
- bearerAuth: []
- apiKeyAuth: []
tags:
- name: trackers
paths:
/api/v1/trackers:
post:
tags:
- trackers
summary: Create a Notyfi tracker
description: Product-named alias of feed-request creation; returns the canonical ``public_id``.
operationId: create_tracker_api_v1_trackers_post
parameters:
- name: X-Notyfi-ID-Token
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Notyfi-Id-Token
- name: Idempotency-Key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Idempotency-Key
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequestCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequest'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Principal request limit or rolling tracker-creation limit; honour Retry-After.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: The API key lacks the feeds:write capability required for tracker mutations.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: The requested delivery cadence requires Pro.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Active tracker plan limit, verified-account requirement, or Idempotency-Key body conflict.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Invalid body, cadence, or Idempotency-Key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
get:
tags:
- trackers
summary: List the caller's Notyfi trackers
operationId: list_trackers_api_v1_trackers_get
parameters:
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/FeedRequest'
title: Response List Trackers Api V1 Trackers Get
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/trackers/{public_id}:
get:
tags:
- trackers
summary: Get one tracker by opaque public id
operationId: get_tracker_api_v1_trackers__public_id__get
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequest'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'410':
description: The owned tracker was soft-deleted (code 'feed_deleted').
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- trackers
summary: Archive a tracker by opaque public id
operationId: archive_tracker_api_v1_trackers__public_id__delete
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequest'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: The API key lacks the feeds:write capability required for tracker mutations.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Illegal lifecycle transition -- ratify/decline is only legal while the request is in state 'spec_ready'.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/trackers/{public_id}/progress:
get:
tags:
- trackers
summary: Get tracker research/build progress by opaque public id
operationId: get_tracker_progress_api_v1_trackers__public_id__progress_get
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequestProgress'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'410':
description: The owned tracker was soft-deleted (code 'feed_deleted').
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/trackers/{public_id}/events:
get:
tags:
- trackers
summary: List a live tracker's canonical events by opaque public id
operationId: list_tracker_events_api_v1_trackers__public_id__events_get
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: cursor
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Cursor
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Page_FeedEvent_'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'410':
description: The owned tracker was soft-deleted (code 'feed_deleted').
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/trackers/{public_id}/delivery:
patch:
tags:
- trackers
summary: Update tracker delivery by opaque public id
operationId: update_tracker_delivery_api_v1_trackers__public_id__delivery_patch
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: X-Notyfi-ID-Token
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Notyfi-Id-Token
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FeedDeliveryUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequest'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: The API key lacks the feeds:write capability required for tracker mutations.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'410':
description: The owned tracker was soft-deleted (code 'feed_deleted').
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Cadence requires Pro.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Verified account email is required.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/api/v1/trackers/{public_id}/retry:
post:
tags:
- trackers
summary: Retry a stalled tracker by opaque public id
operationId: retry_tracker_api_v1_trackers__public_id__retry_post
parameters:
- name: public_id
in: path
required: true
schema:
type: string
pattern: ^fr_[A-Za-z0-9_-]{22}$
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
title: Public Id
description: Opaque tracker id returned by create/list (not the internal database id or feed slug).
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
- name: x-api-key
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: X-Api-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FeedRequest'
'401':
description: Missing or invalid credentials (auth enabled).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (per-principal fixed window). Honour the Retry-After + X-RateLimit-* headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: The API key lacks the feeds:write capability required for tracker mutations.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Feed request not found (or owned by another tenant).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'410':
description: The owned tracker was soft-deleted (code 'feed_deleted').
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: Not retryable -- the request is not in state 'researching'/'building', or its run still looks ACTIVE (recent activity on the staleness clock; retry unlocks after inactivity).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: The retry was accepted but the dispatch queue is unconfigured/unavailable -- nothing was re-queued (code 'dispatch_unavailable'); try again shortly.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
ErrorBody:
properties:
code:
type: string
title: Code
description: Stable machine-readable error code.
message:
type: string
title: Message
description: Human-readable detail.
request_id:
anyOf:
- type: string
- type: 'null'
title: Request Id
description: Correlation id, when available.
type: object
required:
- code
- message
title: ErrorBody
FeedProgressEntry:
properties:
ts:
anyOf:
- type: string
- type: 'null'
title: Ts
description: ISO-8601 UTC stamp when the line was appended.
line:
type: string
title: Line
description: The human-readable progress line.
type: object
required:
- line
title: FeedProgressEntry
description: 'One legible line in a feed request''s LIVE research trail (append-only): a UTC timestamp + the
human-readable line (''probed <url> -> socrata 5 rows OK'', ''excluded <url>: robots'', ''dry-run:
extracted N in-scope'', ''spec_ready: slug=... -> attached'').'
Page_FeedEvent_:
properties:
items:
items:
$ref: '#/components/schemas/FeedEvent'
type: array
title: Items
description: The page of results.
next_cursor:
anyOf:
- type: string
- type: 'null'
title: Next Cursor
description: Opaque cursor for the next page; null at end.
total:
type: integer
title: Total
description: Count of items in this response (approximate).
default: 0
type: object
title: Page[FeedEvent]
example:
items: []
total: 0
EnginePin:
properties:
version:
type: string
title: Version
description: Registry name of the pinned engine ('legacy', 'opus-tuned', ...) -- validated against crawler.engines.ENGINES.
config_version:
type: integer
minimum: 1.0
title: Config Version
description: 'The engine''s config_version at pin time (provenance: which tuning of the recipe produced this feed''s current state).'
default: 1
overrides:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Overrides
description: 'Per-feed engine overrides, validated against the PINNED engine''s declared lever set (search engines: model, web_search_tool, max_uses, max_tokens, max_turns, backfill_days, prompt_addendum; watch-observe declares its own observe-shaped set). null = the engine''s registry defaults.'
additionalProperties: false
type: object
required:
- version
title: EnginePin
description: 'Which acquisition-engine recipe runs this feed''s search stage, pinned per feed.
The pin is what makes engine rollouts safe: a spec without one (everything compiled
before the registry) resolves to the FROZEN legacy recipe, so shipping a new image never
moves an existing feed. ``overrides`` is the per-feed manual-augmentation surface --
keys AND value coercibility are validated against the PINNED ENGINE''s declared lever set
(``Engine.override_keys``; config shapes differ per engine) so a typo''d augmentation
fails at attach-spec, never silently at run time.'
FeedEvent:
properties:
id:
type: integer
title: Id
feed_slug:
type: string
title: Feed Slug
revision:
type: string
title: Revision
canonical_key:
anyOf:
- type: string
- type: 'null'
title: Canonical Key
title:
anyOf:
- type: string
- type: 'null'
title: Title
summary:
anyOf:
- type: string
- type: 'null'
title: Summary
occurred_at:
anyOf:
- type: string
- type: 'null'
title: Occurred At
attributes:
additionalProperties: true
type: object
title: Attributes
status:
type: string
title: Status
default: open
created_at:
anyOf:
- type: string
- type: 'null'
title: Created At
updated_at:
anyOf:
- type: string
- type: 'null'
title: Updated At
sources:
items:
$ref: '#/components/schemas/FeedEventSource'
type: array
title: Sources
type: object
required:
- id
- feed_slug
- revision
title: FeedEvent
description: 'The current OPEN head of one deduplicated feed event.
``id`` is the stable canonical event id. ``revision`` hashes the exact event-and-evidence
snapshot used by feed notifications, so dashboard, email, REST, and later MCP consumers can
identify the same immutable revision without treating individual observations as separate cards.'
example:
attributes:
recall_number: D-0001-2026
canonical_key: recall-ndc-0001
created_at: '2026-07-11T18:00:00+00:00'
feed_slug: fda-drug-recalls
id: 42
occurred_at: '2026-07-11'
revision: 4e9f3bc1a0b5a1f4a7343d0a5fcd9d0f0dd5e12d9b59ed0d636f7e56e8a8146c
sources:
- content_hash: sha256:example
external_id: D-0001-2026
ingested_at: '2026-07-12T08:29:00+00:00'
observation_id: 88
reported_at: '2026-07-11'
source_key: fda-enforcement-api
title: Enforcement report
url: https://www.fda.gov/example
status: open
summary: A voluntary recall was announced for one affected lot.
title: Manufacturer recalls one lot of Example Tablets
updated_at: '2026-07-12T08:30:00+00:00'
FeedRequestState:
type: string
enum:
- submitted
- researching
- spec_ready
- ratified
- declined
- refused
- building
- live
- archived
- quarantined
title: FeedRequestState
description: 'Where a feed request is in its lifecycle. USER-visible: submitted -> researching ->
spec_ready -> {ratified, declined} -> building -> live; ``refused`` is the honest-refusal
outcome (research found no adequate source backbone -- the Coverage Report says why);
``archived`` is the SOFT DELETE ("REMOVE FROM WORKSPACE") that stops serving/polling but KEEPS all
the feed''s work and RESERVES its slug. Any visible state can be archived; archived is terminal.
``quarantined`` is the CONTENT-POLICY hold: a create whose query trips moderation is recorded here
instead of researched/served (``refusal_reason`` carries the policy message); reversible to
archived (purge) or submitted (release a false positive).'
FeedOntology:
properties:
entity_types:
items:
type: string
type: array
minItems: 1
title: Entity Types
description: Entity types the feed resolves ('building', 'organization').
identity_pattern:
type: string
title: Identity Pattern
description: 'The seeded identity-pattern registry key (''org-event'' | ''place-asset'' | ''schema-event'' | ''search-event'') -- validated against crawler.identity_patterns (constrained library, decision #5).'
event_types:
items:
type: string
type: array
minItems: 1
title: Event Types
description: Typed event kinds the feed emits ('transaction', 'permit').
predicates:
items:
type: string
type: array
title: Predicates
description: Fact predicates extracted per event ('sale_price', ...).
additionalProperties: false
type: object
required:
- entity_types
- identity_pattern
- event_types
title: FeedOntology
description: The feed's entity/event vocabulary + the identity pattern that keys its entities.
DedupPolicy:
properties:
identity_pattern:
type: string
title: Identity Pattern
description: The registry pattern the sequential dedup lane runs (must match the registry).
adjudication_prompt_skeleton:
type: string
minLength: 1
title: Adjudication Prompt Skeleton
description: The same-X judge prompt skeleton (e.g. same-TRANSACTION iff same BBL +/-30d +/-5%).
uncertainty_bias:
$ref: '#/components/schemas/UncertaintyBias'
description: The declared merge cost asymmetry ('under-merge' | 'over-merge').
notes:
anyOf:
- type: string
- type: 'null'
title: Notes
description: Hard cases / eval-pair notes.
additionalProperties: false
type: object
required:
- identity_pattern
- adjudication_prompt_skeleton
- uncertainty_bias
title: DedupPolicy
description: 'The feed''s dedup identity model, declared: the keyer pattern, the same-X adjudication prompt
skeleton (agents fill parameters, never invent identity theory), and the EXPLICIT cost-asymmetry
declaration the prompts encode.'
SchemaField:
properties:
name:
type: string
pattern: ^[a-z][a-z0-9_]*$
title: Name
description: snake_case field name.
type:
$ref: '#/components/schemas/FieldType'
description: Value type (closed vocabulary).
required:
type: boolean
title: Required
description: True = every in-scope record must carry it; a null required field is 'unable'. Fields selected in identity_fields are preferred semantic identity hints and are canonicalized to optional because the engine has a source-envelope fallback.
default: false
role:
$ref: '#/components/schemas/FieldRole'
description: Advisory semantic role (rendering hint).
default: detail
entity_role:
anyOf:
- $ref: '#/components/schemas/EntityRole'
- type: 'null'
description: Entity typing (role='entity' fields only).
enum_values:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Enum Values
description: Enum vocabulary (type='enum' only).
enum_open:
type: boolean
title: Enum Open
description: True = enum_values are suggested, not exhaustive.
default: false
unit:
anyOf:
- type: string
- type: 'null'
title: Unit
description: Unit label (USD, km, kt, mb).
display_of:
anyOf:
- type: string
- type: 'null'
title: Display Of
description: This field is the as-reported display twin of a canonical field.
primary:
type: boolean
title: Primary
description: THE ranking/filter quantifier (max one per schema).
default: false
derived:
type: boolean
title: Derived
description: LLM-synthesized from prose, not source-mapped (honesty flag).
default: false
description:
type: string
minLength: 1
title: Description
description: What to extract -- doubles as the extractor prompt line.
additionalProperties: false
type: object
# --- truncated at 32 KB (66 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/notyfi/refs/heads/main/openapi/notyfi-trackers-api-openapi.yml