Shriraj Patil Portfolio — Developer Portal

API documentation, quickstart guide, endpoint reference, and machine-readable resources for AI agents and developers.

Quickstart

Get started with the Shriraj Patil Portfolio API in under 30 seconds:

1. Check API Health

curl https://portfolio-shriraj.vercel.app/api/health

2. Fetch Portfolio as Markdown (for LLMs)

curl -H "Accept: text/markdown" https://portfolio-shriraj.vercel.app/

3. Send a Notification (POST)

curl -X POST https://portfolio-shriraj.vercel.app/api/notify \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello from an AI agent"}'

API Reference

Full machine-readable API specification: OpenAPI 3.1 JSON | OpenAPI 3.1 YAML

MethodEndpointDescriptionAuth
GET/Portfolio homepage — supports Accept: text/markdown content negotiationNone
GET/api/healthAPI health check, version, and endpoint discoveryNone
POST/api/notifyDispatch visitor analytics notification to TelegramNone (CORS restricted)
GET/index.mdFull Markdown portfolio profileNone
GET/llms.txtLLM context index (llmstxt.org standard)None
GET/llms-full.txtComprehensive LLM context documentNone
GET/openapi.jsonOpenAPI 3.1 specification (JSON)None
GET/sitemap.xmlXML sitemapNone

Authentication

The Shriraj Patil Portfolio API is fully public and unauthenticated. No API keys are required. All read endpoints are open to any client. The /api/notify endpoint is CORS-restricted to the portfolio origin.

Versioning and Deprecation Policy

The API follows semantic versioning. The current version is v1.0.0.

Rate Limiting

All API endpoints include standard rate limit headers per RFC draft-ietf-httpapi-ratelimit-headers:

HeaderDescriptionValue
RateLimit-LimitMaximum requests per window60
RateLimit-RemainingRemaining requests in current windowDynamic
RateLimit-ResetSeconds until window resets60
Retry-AfterSeconds to wait (returned on 429)60

If you receive a 429 Too Many Requests response, wait for the Retry-After duration before retrying.

Error Response Format

All API errors return structured JSON with consistent fields:

{
  "error": {
    "code": "INVALID_REQUEST_BODY",
    "message": "Missing required 'message' string field in request body.",
    "status": 400,
    "hint": "Provide a non-empty 'message' string in the JSON payload.",
    "documentation_url": "https://portfolio-shriraj.vercel.app/developers"
  }
}

Content Negotiation

The homepage (/) supports HTTP Accept header content negotiation per RFC 9110:

All responses include a Vary: Accept, Accept-Encoding header for correct caching.

Machine-Readable Resources

Sandbox and Testing

All endpoints are live and testable without authentication. Use curl, Postman, or any HTTP client:

# Test JSON error handling
curl -s https://portfolio-shriraj.vercel.app/api/nonexistent | jq .

# Verify rate limit headers
curl -sI https://portfolio-shriraj.vercel.app/api/health | grep -i ratelimit

# Test content negotiation
curl -H "Accept: text/markdown" https://portfolio-shriraj.vercel.app/

Support and Contact

For questions, feedback, or integration support: