Skip to content

Sourabh Pradhan Portfolio API.

One public endpoint. Zero auth. Machine-facing documentation for the contact API and agent resources of Sourabh Pradhan's portfolio.

Sends a message to the site owner by email. No authentication and no API key. Rate limit: five requests per minute per IP. Field limits: name ≤ 200 chars, email ≤ 254 chars, message ≤ 5000 chars.

curl -X POST https://sourabh08.vercel.app/api/contact \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada Lovelace","email":"ada@example.com","message":"Hello"}'

# → 200 {"success":true}

Full specification: /openapi.json — every operation has a unique operationId (submitContactMessage), typed request schemas, and documented error responses.

Every error response is JSON with three fields: error (human-readable), code (stable machine identifier), and hint (how to fix it). Undefined /api/* paths return JSON 404s, never HTML.

400 · invalid_jsonBody is not valid JSON.
400 · missing_fieldsOne of name/email/message is missing or empty.
400 · invalid_namename is not a string or exceeds 200 characters.
400 · invalid_emailemail fails format check or exceeds 254 characters.
400 · invalid_messagemessage is not a string or exceeds 5000 characters.
405 · method_not_allowedNon-POST method on /api/contact (Allow: POST).
429 · rate_limitedMore than 5 requests per minute per IP. Retry after 60s.
500 · delivery_failedEmail delivery failed. Safe to retry once.
503 · service_unavailableEmail service not configured. Retry later.
404 · not_foundUndefined /api/* path (JSON, never HTML).
/openapi.jsonOpenAPI 3.1 specification
/api/openapi.jsonSpec alias under /api
/llms.txtAgent index with when-to-use guidance
/llms-full.txtFull plaintext documentation
/geo.txtGenerative-engine manifest
/sitemap.xmlAll indexable pages

Send Accept: text/markdown on any page URL to receive its markdown mirror instead of HTML. Nonexistent paths return HTTP 404 with a markdown body listing recovery links. Responses carry Vary: Accept, Accept-Encoding.