Goodeye Verifiers API

The verifiers API from Goodeye — 4 operation(s) for verifiers.

GitHub OpenAPI

Operations 6

POST /verifiers Deploy a verifier (create or new version) #
GET /verifiers List active verifiers visible to the caller #
GET /verifiers/{verifier_id} Get one verifier version (criterion, contract, calibration) #
DELETE /verifiers/{verifier_id} Revoke a verifier #
POST /verifiers/{verifier_id}/runs Run a verifier to check whether an output meets its criterion #
DELETE /verifiers/{verifier_id}/permanent Permanently delete a verifier #

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/goodeye-dev:goodeye-dev-verifiers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

goodeye-dev-verifiers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Goodeye Verifiers API
  version: 0.1.0
servers:
- url: /v1
tags:
- name: verifiers
paths:
  /verifiers:
    post:
      tags:
      - verifiers
      summary: Deploy a verifier (create or new version)
      description: Create a **caller-owned** verifier or append a new version to one with the same ``name``. First deploy must omit ``expected_version_token``; subsequent deploys must include the latest token returned by deploy, list, or get. Token mismatch returns 409. Creating a new verifier whose ``name`` matches an active platform-managed (``scope=system``) verifier returns 409. Returns ``{verifier_id, name, current_version, version, version_token, status, input_contract, config_hash}``.
      operationId: deploy_verifier_route_verifiers_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployVerifierInput'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Deploy Verifier Route Verifiers Post
        '400':
          description: 'Validation error: bad contract, fields, or examples.'
        '401':
          description: Authentication required.
        '409':
          description: 'Conflict: missing or mismatched ``expected_version_token``, or name reserved for a platform-managed verifier.'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    get:
      tags:
      - verifiers
      summary: List active verifiers visible to the caller
      description: 'Returns ``{items: [...], next_cursor: str | null}`` with one entry per non-revoked verifier the caller owns or can access through skill-derived grants. Platform ``scope=system`` verifiers never appear here. Anonymous callers get an empty list.'
      operationId: list_verifiers_route_verifiers_get
      parameters:
      - 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
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response List Verifiers Route Verifiers Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /verifiers/{verifier_id}:
    get:
      tags:
      - verifiers
      summary: Get one verifier version (criterion, contract, calibration)
      description: 'Defaults to the current version; pass ``?version=N`` to pin. Returns the full deploy-time payload plus ``config_hash`` for drift detection. ``verifier_id`` accepts UUID string or accessible user-scope verifier name. Any caller who can reach the verifier can read it: the owner and skill grantees at any role (a view/exec grantee can read, not only run). Platform-managed (``scope=system``), unauthorized, or revoked verifiers are always 404.'
      operationId: get_verifier_version_route_verifiers__verifier_id__get
      parameters:
      - name: verifier_id
        in: path
        required: true
        schema:
          type: string
          title: Verifier Id
      - name: version
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          title: Version
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Get Verifier Version Route Verifiers  Verifier Id  Get
        '401':
          description: Authentication required.
        '404':
          description: Verifier not found, revoked, or not accessible to caller.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
      - verifiers
      summary: Revoke a verifier
      description: Sets ``status="revoked"`` and ``revoked_at`` for **caller-owned** ``scope=user`` verifiers only (UUID or name). Platform ``scope=system`` verifiers reject as 404. The verifier disappears from list/get/run for the owner; existing run rows are retained. Irreversible; replace by deploying a fresh verifier under a new name.
      operationId: revoke_verifier_route_verifiers__verifier_id__delete
      parameters:
      - name: verifier_id
        in: path
        required: true
        schema:
          type: string
          title: Verifier Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Revoke Verifier Route Verifiers  Verifier Id  Delete
        '401':
          description: Authentication required.
        '404':
          description: Verifier not found, already revoked, or not owned by caller.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /verifiers/{verifier_id}/runs:
    post:
      tags:
      - verifiers
      summary: Run a verifier to check whether an output meets its criterion
      description: Runs the judge against ``inputs`` (and optional ``media_url``). Path ``verifier_id`` is a Verifier UUID, or ``system:`` for platform-managed verifiers. Anonymous callers may run a Verifier UUID iff it appears in some live ``template_versions.verifier_snapshots`` (publicly-runnable gate); spend is gated by the credit ledger. Caller-shape errors return 400 with no row written; runtime errors return 201 with ``status="error"`` and an ``error_code`` of ``runtime_error``, ``verifier_unavailable``, or ``timeout``. Returns ``{verifier_run_id, anonymous_verifier_run_id, verifier_id, version, status, passed, reasoning, duration_ms, created_at}`` (one of ``verifier_run_id`` or ``anonymous_verifier_run_id`` populated). A successful run attributed to a skill you own also echoes that skill's ``skill_id``.
      operationId: run_verifier_route_verifiers__verifier_id__runs_post
      parameters:
      - name: verifier_id
        in: path
        required: true
        schema:
          type: string
          title: Verifier Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/_RunVerifierBody'
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Run Verifier Route Verifiers  Verifier Id  Runs Post
        '400':
          description: Caller-shape error (bad inputs, missing or excess fields, wrong media).
        '404':
          description: Verifier or referenced skill not visible to caller.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /verifiers/{verifier_id}/permanent:
    delete:
      tags:
      - verifiers
      summary: Permanently delete a verifier
      description: 'Permanently and immediately erase a **caller-owned** ``scope=user`` verifier. The verifier, all its versions (criterion, calibration examples, input contracts), all run records, and all access grants are removed from the live system at once. There is no recovery path. Use ``DELETE /{verifier_id}`` (revoke) to deactivate without erasing, keeping the audit trail intact. Serving gate: if any live published template version carries a snapshot that references this verifier, deletion is refused (409). Unpublish the relevant template version(s) first, then retry. Platform ``scope=system`` verifiers and another user''s verifiers always surface as 404. Encrypted backups age out within the platform''s standard retention window (up to three months), so the data is not instantly erased from all systems everywhere, but it is no longer accessible through any product surface after this call. Returns ``{verifier_id, name, deleted: true}``.'
      operationId: delete_verifier_route_verifiers__verifier_id__permanent_delete
      parameters:
      - name: verifier_id
        in: path
        required: true
        schema:
          type: string
          title: Verifier Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                title: Response Delete Verifier Route Verifiers  Verifier Id  Permanent Delete
        '401':
          description: Authentication required.
        '404':
          description: Verifier not found, not owned by caller, or platform-managed (scope=system).
        '409':
          description: Verifier is referenced by a live published template version. Unpublish the template version(s) first.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    FewShotExample:
      properties:
        inputs:
          additionalProperties:
            type: string
          type: object
          title: Inputs
          description: Map of ``input_fields`` name to value. Required for ``text`` and ``text_image`` contracts, must be empty for ``image``.
        media_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Media Url
          description: Public HTTPS image URL. Required for ``text_image`` and ``image`` contracts, rejected for ``text``.
        passed:
          type: boolean
          title: Passed
          description: 'Ground-truth label: did this example satisfy the criterion?'
        reasoning:
          anyOf:
          - type: string
          - type: 'null'
          title: Reasoning
          description: Optional rationale shown to the judge alongside the label.
      additionalProperties: false
      type: object
      required:
      - passed
      title: FewShotExample
      description: 'A single labeled example attached to a verifier version. The runtime

        shows these to the judge as calibration demonstrations.'
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    InputContract:
      type: string
      enum:
      - text
      - text_image
      - image
      title: InputContract
      description: 'Shape of inputs the verifier judges.


        ``text``: text fields only (``input_fields`` required, ``media_url`` rejected).

        ``text_image``: text fields plus one image (both required at run time).

        ``image``: a single image only (``input_fields`` must be empty, ``media_url`` required).'
    ModelConfig:
      properties:
        model:
          type: string
          maxLength: 128
          minLength: 1
          title: Model
          description: Model identifier for the judge LLM (e.g. ``openai/gpt-5.4-mini``, ``anthropic/claude-sonnet-4-6``). Must be one of the platform's supported models. Defaults to the platform's standard judge model.
        reasoning_effort:
          type: string
          enum:
          - low
          - medium
          - high
          - xhigh
          title: Reasoning Effort
          description: Reasoning budget hint forwarded to providers that accept it. Silently dropped for models that don't expose ``reasoning_effort``.
          default: medium
      additionalProperties: false
      type: object
      title: ModelConfig
      description: 'Verifier judge LM configuration. Only ``model`` and ``reasoning_effort``

        are honored; any other field is rejected so callers can''t quietly leak

        sampling knobs (temperature, max_tokens, etc.) into the judge.'
    _RunVerifierBody:
      properties:
        version:
          anyOf:
          - type: integer
            minimum: 1.0
          - type: 'null'
          title: Version
          description: Pin to a specific verifier version; defaults to the current version.
        inputs:
          additionalProperties:
            type: string
          type: object
          title: Inputs
          description: Map keyed by the version's ``input_fields``. Keys must match the deployed list exactly; values must be non-empty strings.
        media_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Media Url
          description: Public HTTPS image URL. Required for ``text_image`` and ``image`` contracts, rejected for ``text``.
        skill_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Skill Id
          description: 'Optional skill UUID for provenance. Access-checked: a skill the caller cannot see surfaces as 404.'
        skill_version:
          anyOf:
          - type: integer
          - type: 'null'
          title: Skill Version
          description: Skill version invoking this run, paired with ``skill_id``.
        skill_ref:
          anyOf:
          - type: string
            maxLength: 256
          - type: 'null'
          title: Skill Ref
          description: Free-form skill label (slug, name) for human-readable provenance.
        run_id:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
          title: Run Id
          description: Optional caller-supplied correlation ID stamped onto the run row.
      type: object
      title: _RunVerifierBody
      description: 'Request body for ``POST /verifiers/{verifier_id}/runs``.


        ``inputs`` keys must match the version''s ``input_fields`` exactly.

        ``media_url`` is required for ``text_image`` and ``image`` contracts, and

        rejected for ``text``. Caller-shape errors return 400 with no run row

        written; judge runtime errors return 201 with ``status="error"``.'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    DeployVerifierInput:
      properties:
        name:
          type: string
          maxLength: 128
          minLength: 1
          pattern: ^[a-z0-9][a-z0-9-]*$
          title: Name
          description: Verifier name, unique per owner among non-revoked verifiers. Lowercase letters, digits, and hyphens; no spaces.
        description:
          type: string
          maxLength: 1024
          minLength: 1
          title: Description
          description: Short human-readable summary of what the verifier judges.
        criterion:
          type: string
          maxLength: 20000
          minLength: 1
          title: Criterion
          description: The rubric prose the judge applies. Write it as a direct instruction to the judge (e.g. 'Return passed=true when ...').
        input_contract:
          $ref: '#/components/schemas/InputContract'
          description: 'Shape of inputs at run time: ``text``, ``text_image``, or ``image``. Drives signature shape and what ``run_verifier`` accepts.'
        input_fields:
          items:
            type: string
          type: array
          title: Input Fields
          description: Names of the text inputs the judge sees. Required for ``text`` and ``text_image``; must be empty for ``image``. Names are deduplicated case-insensitively. ``run_verifier`` rejects callers whose ``inputs`` keys do not match this list exactly.
        few_shot_examples:
          items:
            $ref: '#/components/schemas/FewShotExample'
          type: array
          title: Few Shot Examples
          description: 'Labeled calibration examples (3 to 10 are typical). Each example must satisfy the contract: ``text`` examples carry only ``inputs``; ``text_image`` carries both ``inputs`` and ``media_url``; ``image`` carries only ``media_url``.'
        model_settings:
          $ref: '#/components/schemas/ModelConfig'
          description: Judge LM settings. Only ``model`` and ``reasoning_effort`` are honored; see ``ModelConfig``.
        expected_version_token:
          anyOf:
          - type: string
            format: uuid
          - type: 'null'
          title: Expected Version Token
          description: Optimistic-concurrency token. Required when re-deploying an existing verifier to confirm you've seen the latest version (get it from ``deploy_verifier``, ``list_verifiers``, or ``get_verifier``). Must be omitted on first deploy. Mismatch returns a Conflict with the current token.
      type: object
      required:
      - name
      - description
      - criterion
      - input_contract
      title: DeployVerifierInput
      description: 'Payload for ``deploy_verifier``: create a new verifier or append a new

        version to an existing one (owner-scoped, name-uniqueness within owner).'