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
Derived by API Evangelist Built from the contracts Dyno publishes. Dyno did not publish this file.
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.

Work with this as data

Every overlay 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 openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • 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 overlay
curl "https://apis.io/api/v1/overlays/dyno-phi-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?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.