vophuthinh API Documentation
The vophuthinh.com API is a free, read-only JSON API with no authentication. The machine-readable spec is /openapi.json (OpenAPI 3.1). An MCP server is available at /api/mcp (Streamable HTTP); its manifest is /.well-known/mcp/server-card.json. Agents can also read llms.txt or request the home page with Accept: text/markdown.
Authentication
None. All GET endpoints are public. CORS allows any origin.
Endpoints
GET /api/v1/profile— profile, contact, awards, experience.GET /api/v1/skills— skills grouped by area.GET /api/v1/projects?category=llm— projects, optional category filter.POST /api/v1/contact— send a message (JSON: from_name, email_id, message; 5 per IP per hour).POST /api/mcp— MCP JSON-RPC 2.0 (tools: get_profile, get_skills, list_projects).
Versioning and deprecation
Current version: v1, served at /api/v1/* (unversioned /api/* stays as an alias). A breaking change ships under a new prefix (/v2/) and v1 stays available for at least 90 days, announced with Deprecation and Sunset response headers.
Request and response shapes
GET /api/v1/profilereturns{name, title, company, location, email, website, availability, summary, awards[], languages[], experience[]}.GET /api/v1/skillsreturns{ai_ml[], frameworks[], data[], infrastructure[], web[]}, each an array of strings.GET /api/v1/projectsreturns{count, projects[{title, category, summary, problem, solution, stack[]}]}.POST /api/v1/contacttakes{from_name, email_id, message (max 1000 chars)}and returns{success, message}. Status 400 invalid input, 415 wrong content type, 429 rate limited.POST /api/mcptakes one JSON-RPC 2.0 message per request:initialize,ping,tools/list,tools/callwithparams: {name, arguments}.
Examples
curl https://vophuthinh.com/api/v1/profile
curl "https://vophuthinh.com/api/v1/projects?category=llm"
curl -X POST https://vophuthinh.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -X POST https://vophuthinh.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_projects","arguments":{"category":"llm"}}}'
curl -X POST https://vophuthinh.com/api/v1/contact \
-H 'Content-Type: application/json' \
-d '{"from_name":"Ada","email_id":"ada@example.com","message":"Hello"}'
Errors
Errors are JSON with the HTTP status set accordingly:
{"error":{"code":"not_found","message":"...","hint":"...","docs":"https://vophuthinh.com/docs"}}
Unknown paths return HTTP 404. Send Accept: text/markdown to get a Markdown error body.