Notyfi trackers API

The trackers API from Notyfi — 6 operation(s) for trackers.

Operations 8

POST /api/v1/trackers Create a Notyfi tracker #
GET /api/v1/trackers List the caller's Notyfi trackers #
GET /api/v1/trackers/{public_id} Get one tracker by opaque public id #
DELETE /api/v1/trackers/{public_id} Archive a tracker by opaque public id #
GET /api/v1/trackers/{public_id}/progress Get tracker research/build progress by opaque public id #
GET /api/v1/trackers/{public_id}/events List a live tracker's canonical events by opaque public id #
PATCH /api/v1/trackers/{public_id}/delivery Update tracker delivery by opaque public id #
POST /api/v1/trackers/{public_id}/retry Retry a stalled tracker by opaque public id #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/notyfi-trackers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

notyfi-trackers-api-openapi.yml Raw ↑
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