# Ravicha Suksawasdi Na Ayuthaya — Portfolio Agent API

> The machine-readable surface of a systems-engineering portfolio: discovery, context, and identity documents.

A read-only, publicly reachable collection of documents for agents, served as static files from GitHub Pages.

Everything here belongs to Ravicha Suksawasdi Na Ayuthaya (Palm), an applied AI and backend systems engineer. The API answers three questions: what this site is (discovery), what the work is (context), and who made it (identity).

**There is no authentication and no write surface.** Nothing here mutates state, so there is nothing to protect and no key to issue. `POST`, `PUT`, `PATCH` and `DELETE` are not implemented on any path and the origin answers them the same way it answers any unknown request.

**Versioning.** The document carries a semantic `info.version`. The paths are stable; a breaking change to a documented shape increments the major version and is announced in `/llms.txt`, which is the changelog agents are told to watch.

**Errors.** Every operation documents the 404 it really returns: the site 404 document as `text/html`, for every `Accept`. The `application/problem+json` envelope is described under `x-error-model` and `components.schemas.Problem` but is not served and cannot be on static hosting. ADR 0004 records the decision to accept the limitation and state it rather than add an edge layer.

OpenAPI version 3.1.0. Base URL: `https://ravicha2.github.io`.

## Operations

| Path | operationId | Summary |
| --- | --- | --- |
| `/openapi.json` | `getOpenApiDocument` | The OpenAPI document for this API |
| `/.well-known/mcp/server-card.json` | `getMcpServerCard` | MCP Server Card for the published MCP server |
| `/.well-known/agent-skills/index.json` | `getAgentSkillsIndex` | Agent Skills index |
| `/.well-known/agent-card.json` | `getAgentCard` | A2A agent card |
| `/.well-known/api-catalog` | `getApiCatalog` | RFC 9727 API catalog |
| `/.well-known/oauth-protected-resource` | `getProtectedResourceMetadata` | OAuth 2.0 protected resource metadata |
| `/.well-known/ard.json` | `getArdCatalog` | Agentic Resource Discovery catalog |
| `/llms.txt` | `getLlmsTxt` | Concise agent guide |
| `/llms-full.txt` | `getLlmsFullTxt` | Full agent dossier |
| `/agents.md` | `getAgentsMd` | When to use this site, and how |
| `/auth.md` | `getAuthMd` | How to authenticate, as prose |
| `/index.md` | `getMarkdownHome` | The homepage as markdown |
| `/.well-known/agent-skills/portfolio/SKILL.md` | `getPortfolioSkill` | The portfolio knowledge skill, as markdown |
| `/sitemap.xml` | `getSitemap` | Sitemap |
| `/cv.pdf` | `getCurriculumVitae` | Curriculum vitae as PDF |

## Authentication

Public and read-only. See /auth.md for the walkthrough.

## Errors

The 404 documented on each operation is the text/html document GitHub Pages serves for an unmatched path; the request also lands in the SPA, which renders the same message for a browser. RFC 9457 application/problem+json is described by components.schemas.Problem but is not served, and cannot be on static hosting: the origin cannot set a response content type or vary a body by Accept. ADR 0004 records the decision to accept this and state it.

## Response media types

| Path | Content type | Returns |
| --- | --- | --- |
| `/openapi.json` | `application/json` | This document, as JSON. |
| `/.well-known/mcp/server-card.json` | `application/json` | A Server Card. |
| `/.well-known/agent-skills/index.json` | `application/json` | The skills index. |
| `/.well-known/agent-card.json` | `application/json` | The agent card. |
| `/.well-known/api-catalog` | `application/octet-stream` | A linkset with one item per service description. |
| `/.well-known/oauth-protected-resource` | `application/octet-stream` | Protected resource metadata. |
| `/.well-known/ard.json` | `application/json` | The ARD catalog. |
| `/llms.txt` | `text/plain` | A plain-text markdown index. |
| `/llms-full.txt` | `text/plain` | A plain-text markdown dossier. |
| `/agents.md` | `text/markdown` | A markdown guide. |
| `/auth.md` | `text/markdown` | A markdown walkthrough. |
| `/index.md` | `text/markdown` | A markdown rendering of the homepage. |
| `/.well-known/agent-skills/portfolio/SKILL.md` | `text/markdown` | A markdown skill document. |
| `/sitemap.xml` | `application/xml` | A sitemap. |
| `/cv.pdf` | `application/pdf` | A PDF. |

## Schema components

- **Problem** — RFC 9457 problem details. Described for completeness and deliberately not served: GitHub Pages answers an unmatched path with the 404.html document as text/html for every Accept, and offers no way to set a response header or override the body per media type. See x-error-model and ADR 0004. Required: type, title, status.
- **McpServerCard** — An MCP Server Card, per the server-card extension chartered by SEP-2127. Required: $schema, name, version, description.
- **Linkset** — An RFC 9264 linkset, as profiled for API discovery by RFC 9727. Required: linkset.
- **AgentSkillsIndex** — An Agent Skills discovery index (v0.2.0): the skills this origin offers, each with a description and the URL that serves it. Required: $schema, skills.
- **AgentCard** — An Agent2Agent agent card, in the v1.0 shape. The endpoint lives in supportedInterfaces[], not in a top-level url, and there is no top-level protocolVersion. Required: name, description, supportedInterfaces, version, capabilities, defaultInputModes, defaultOutputModes, skills.
- **ProtectedResourceMetadata** — RFC 9728 OAuth 2.0 protected resource metadata. Required: resource.

---

## Fetching the rest of this site

- This page as HTML: <https://ravicha2.github.io/docs/>
- Concise index: <https://ravicha2.github.io/llms.txt>
- Full dossier: <https://ravicha2.github.io/llms-full.txt>
- When to use this material: <https://ravicha2.github.io/agents.md>
- API description (OpenAPI 3.1): <https://ravicha2.github.io/openapi.json>
- API reference: <https://ravicha2.github.io/docs/>
- Sitemap: <https://ravicha2.github.io/sitemap.xml>
