Sunny Yuen · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Resume Agent API

Non-destructive enhancements to https://agent.yuens.me/openapi.json (openapi/yuens-me-openapi.yml). Every addition below is grounded in a live probe or the provider's own README on 2026-09-19: the 400 envelope was observed by POSTing an empty body; the 429 ceiling is published in the agent card's api-docs extension and README; tags and externalDocs point at the provider's own documentation. The original is never mutated.

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

What the actions change

tags429x-a2a-skill400contactlicenseexternalDocsdescription

Targets 16

$.info
$
$.servers[0]
$.paths['/query'].post
$.paths['/match'].post
$.paths['/info'].get
$.paths['/availability'].get
$.paths['/projects'].get
$.paths['/observations'].get
$.paths['/query'].post.requestBody.content['application/json'].schema.properties
$.paths['/query'].post.responses
$.paths['/match'].post.responses
$.paths['/info'].get.responses
$.paths['/availability'].get.responses
$.paths['/projects'].get.responses
$.paths['/observations'].get.responses

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Resume Agent API
  version: 2026-09-19
  description: >-
    Non-destructive enhancements to https://agent.yuens.me/openapi.json (openapi/yuens-me-openapi.yml). Every
    addition below is grounded in a live probe or the provider's own README on 2026-09-19: the 400 envelope
    was observed by POSTing an empty body; the 429 ceiling is published in the agent card's api-docs
    extension and README; tags and externalDocs point at the provider's own documentation. The original is
    never mutated.
extends: openapi/yuens-me-openapi.yml
x-generated: '2026-09-19'
x-method: generated
actions:
  - target: $.info
    update:
      contact:
        name: Sunny Yuen (resume-agent maintainer)
        url: https://github.com/yuens1002/resume-agent
      license:
        name: MIT
        url: https://github.com/yuens1002/resume-agent/blob/main/LICENSE
  - target: $
    update:
      externalDocs:
        description: Public API endpoints, engagement rules and security model (source README)
        url: https://github.com/yuens1002/resume-agent#public-api-endpoints
      tags:
        - name: Query
          description: Natural-language questions answered from the published profile (also exposed as the MCP tool ask_candidate).
        - name: Match
          description: Structured job-fit scoring against a pasted job description.
        - name: Profile
          description: Structured, cacheable profile snapshots with no LLM call.
        - name: Evidence
          description: Portfolio projects and the authored observation trail behind the profile.
  - target: $.servers[0]
    update:
      description: Production. Anonymous; 30 requests per minute per IP on every route except OPTIONS and /health.
  - target: $.paths['/query'].post
    update:
      tags: [Query]
      x-mcp-tool: ask_candidate
      x-a2a-skill: query
  - target: $.paths['/match'].post
    update:
      tags: [Match]
      x-a2a-skill: match
  - target: $.paths['/info'].get
    update:
      tags: [Profile]
      x-a2a-skill: info
  - target: $.paths['/availability'].get
    update:
      tags: [Profile]
      x-a2a-skill: availability
  - target: $.paths['/projects'].get
    update:
      tags: [Evidence]
      x-a2a-skill: projects
  - target: $.paths['/observations'].get
    update:
      tags: [Evidence]
  - target: $.paths['/query'].post.requestBody.content['application/json'].schema.properties
    update:
      stream:
        type: boolean
        default: false
        description: When true the response is chunked text/plain, not JSON (documented in the README and the GET /query self-descriptor).
      style:
        type: string
        enum: [cited, conversational]
        default: cited
        description: cited = inline [N] markers plus a Sources block; conversational = 2-4 plain sentences with attribution only in sources[] (also selected by an x-agent-type header of human).
  - target: $.paths['/query'].post.responses
    update:
      '400':
        description: Request body failed validation (observed 2026-09-19 with an empty body).
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidationError'
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented; response headers are not published).
  - target: $.paths['/match'].post.responses
    update:
      '400':
        description: Request body failed validation (observed 2026-09-19 with an empty body).
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidationError'
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented; response headers are not published).
  - target: $.paths['/info'].get.responses
    update:
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented).
  - target: $.paths['/availability'].get.responses
    update:
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented).
  - target: $.paths['/projects'].get.responses
    update:
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented).
  - target: $.paths['/observations'].get.responses
    update:
      '429':
        description: Per-IP ceiling of 30 requests per minute exceeded (documented).
  - target: $
    update:
      components:
        schemas:
          ValidationError:
            type: object
            description: Zod validation envelope as observed on 2026-09-19.
            properties:
              success:
                type: boolean
                const: false
              error:
                type: object
                properties:
                  name:
                    type: string
                    example: ZodError
                  issues:
                    type: array
                    items:
                      type: object
                      properties:
                        code: {type: string, example: invalid_type}
                        expected: {type: string, example: string}
                        received: {type: string, example: undefined}
                        path: {type: array, items: {type: string}}
                        message: {type: string, example: Required}