Dyno · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Dyno Phi Protein Design API

13 actions 13 updates documentation extends openapi/dyno-phi-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Dyno's API. It is a proposal applied on top of the contract, not a document Dyno publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-note401x-apievangelist-profilex-apievangelist-reviewedx-apievangelist-spec-sourcesecuritySchemessecurityx-apievangelist-servers-note

Targets 10

$.info
$.components
$
$.paths['/v1/phi/jobs/'].post.responses
$.paths['/v1/phi/jobs/'].get.responses
$.paths['/v1/phi/auth/me'].get.responses
$.paths['/v1/phi/jobs/'].post
$.paths['/v1/phi/jobs/{job_id}/status'].get
$.paths['/v1/phi/auth/me/quota'].get
$.paths['/v1/phi/tutorial'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Dyno Phi Protein Design API
  version: 1.0.0
extends: openapi/dyno-phi-openapi.yml
x-generated: '2026-08-10'
x-method: generated
x-source: >-
  Derived from openapi/dyno-phi-openapi.yml plus live probes of
  api.dyno-agents.app and the first-party CLI source at github.com/dynotx/phi-cli.
  This overlay records API Evangelist's additions ONLY — it never mutates the
  harvested original in openapi/_original/. Every action below encodes something
  the provider's API genuinely does but does not declare in its spec.
actions:
# ---------------------------------------------------------------- provenance
- target: $.info
  update:
    x-apievangelist-profile: https://apis.io/provider/dyno/
    x-apievangelist-reviewed: '2026-08-10'
    x-apievangelist-spec-source: https://api.dyno-agents.app/v1/phi/openapi.json

# ------------------------------------------------- declare the real security
# The API enforces an x-api-key header (live 401 proves it) but declares no
# securitySchemes at all, so generated clients treat auth as optional.
- target: $.components
  update:
    securitySchemes:
      ApiKeyAuth:
        type: apiKey
        in: header
        name: x-api-key
        description: >-
          API key created at https://design.dynotx.com/dashboard/settings.
          Keys carry an `ak_` prefix. REQUIRED on every operation — the live API
          returns 401 {"detail":"Missing API key. Provide an x-api-key header."}
          without it. Added by API Evangelist; not declared by the provider.
      BearerAuth:
        type: http
        scheme: bearer
        description: >-
          Documented in the provider's info.description ("Authorization: Bearer
          <key> or a Clerk session token") but not confirmed by live probe.
          Treat ApiKeyAuth as authoritative.
- target: $
  update:
    security:
    - ApiKeyAuth: []

# --------------------------------------------- remove the localhost server
# The published servers[] advertises http://localhost:8000 to the public
# internet, which a naive generated client or agent may attempt.
- target: $.info
  update:
    x-apievangelist-servers-note: >-
      The provider's servers[] includes http://localhost:8000 ("Local
      development"). Third-party clients must use
      https://api.dyno-agents.app only.

# -------------------------------------------------- undeclared real errors
- target: $.components
  update:
    responses:
      UnauthorizedError:
        description: >-
          Missing or invalid API key. Observed live; NOT declared by the
          provider on any operation.
        content:
          application/json:
            schema:
              type: object
              properties:
                detail:
                  type: string
      QuotaExceededError:
        description: >-
          Job quota exceeded (max_total_jobs or max_concurrent_jobs). Handled
          explicitly by the provider's own CLI on POST /v1/phi/jobs/; NOT
          declared in the spec. No Retry-After header is sent.
        content:
          application/json:
            schema:
              type: object
              properties:
                detail:
                  type: string
- target: $.paths['/v1/phi/jobs/'].post.responses
  update:
    '401':
      $ref: '#/components/responses/UnauthorizedError'
    '429':
      $ref: '#/components/responses/QuotaExceededError'
- target: $.paths['/v1/phi/jobs/'].get.responses
  update:
    '401':
      $ref: '#/components/responses/UnauthorizedError'
- target: $.paths['/v1/phi/auth/me'].get.responses
  update:
    '401':
      $ref: '#/components/responses/UnauthorizedError'

# --------------------------------------------------- runtime semantics tags
- target: $.paths['/v1/phi/jobs/'].post
  update:
    x-idempotent: false
    x-apievangelist-note: >-
      The optional run_id field is NOT an idempotency key — the provider
      publishes no replay semantics. A retried submit may create a second job
      and consume quota twice.
    x-consequence: high
    x-cost: GPU compute against the account job quota; no test mode exists.
- target: $.paths['/v1/phi/jobs/{job_id}/status'].get
  update:
    x-poll-interval-seconds: 5
    x-poll-timeout-seconds: 7200
    x-apievangelist-note: >-
      Terminal statuses are completed | failed | cancelled. A failed job is NOT
      an HTTP error — read JobStatus, not the status code.
- target: $.paths['/v1/phi/auth/me/quota'].get
  update:
    x-apievangelist-note: >-
      The only runtime view of remaining quota. This API sends no RateLimit-*,
      X-RateLimit-* or Retry-After headers, so an agent must poll here.
- target: $.paths['/v1/phi/tutorial'].get
  update:
    x-apievangelist-note: >-
      The provider's sandbox: idempotently provisions a PD-L1 tutorial dataset
      in the caller's organization and returns signed URLs for five real binder
      structures. See sandbox/dyno-sandbox.yml.

# ----------------------------------------------------------- tag the untagged
- target: $
  update:
    tags:
    - name: auth
      description: Identity and quota introspection.
    - name: files
      description: Direct and signed-URL file upload.
    - name: ingest
      description: Multi-file ingest sessions that finalize into a dataset.
    - name: datasets
      description: Collections of protein structures that jobs run against.
    - name: jobs
      description: Biomodal computation jobs across twenty model types.
    - name: workflows
      description: DAG plans of operations, planned, versioned and executed.
    - name: protocols
      description: Shareable, forkable, versioned workflow templates.
    - name: agents
      description: Registered LLM agents with bound tool sets.
    - name: tools
      description: Platform tool registry, grouped by category.
    - name: assets
      description: Projects, asset groups and assets produced by runs.
    - name: research-notes
      description: Free-text research notes attached to a dataset.
    - name: tutorial
      description: Provisioned onboarding fixtures.
    - name: admin
      description: Administrative quota management. Not available to ordinary keys.
    - name: runs
      description: >-
        Unversioned legacy run/artifact surface (/health, /runs, /artifacts)
        sitting outside the /v1/phi prefix and carrying no provider tags. Added
        by API Evangelist so these eight operations are not orphaned.