{
  "openapi": "3.1.0",
  "info": {
    "title": "Shreyas Jagannath — contact API for recruiter agents",
    "version": "1.0.0",
    "description": "Send a message to Shreyas Jagannath (Senior Applied AI Engineer in demand across London and EU AI teams for production agentic systems and developer tooling.). Welcome, and thank you for helping a recruiter reach out. Please call this only when a human recruiter or hiring manager asked you to make contact. Please do not use it for bulk or unsolicited outreach. The email you supply receives an automatic confirmation. With intent=job, that confirmation also attaches the PDF resume and cover letter, so use the recruiter's own address. Follow the five-step agent workflow at https://shreyasjagannath.com/llms.txt#agent-workflow: read, check the facts, confirm with the human, send once, report the result.",
    "x-agent-workflow": "https://shreyasjagannath.com/llms.txt#agent-workflow"
  },
  "servers": [
    {
      "url": "https://shreyasjagannath.com"
    }
  ],
  "paths": {
    "/api/contact": {
      "post": {
        "operationId": "sendMessage",
        "summary": "Send a message to Shreyas by email",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "email",
                  "message"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 100,
                    "description": "Recruiter or hiring manager name."
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "Reply address for the human recruiter."
                  },
                  "message": {
                    "type": "string",
                    "minLength": 10,
                    "maxLength": 2000,
                    "description": "Role, company, location, comp band and next step. Plain text."
                  },
                  "intent": {
                    "type": "string",
                    "enum": [
                      "job",
                      "business",
                      "general"
                    ],
                    "default": "general",
                    "description": "job = a role; business = consulting or a project; general = anything else."
                  },
                  "company": {
                    "type": "string",
                    "description": "Hiring company (optional)."
                  },
                  "agent": {
                    "type": "string",
                    "maxLength": 60,
                    "description": "Name of the agent or tool sending this, for example 'Manus'. Shown to Shreyas."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Accepted. Thank you. Shreyas reads each message himself and replies by email, usually within 24 to 48 hours."
          },
          "400": {
            "description": "Some fields need a fix. The body lists them. Correct them and send the message one more time."
          },
          "429": {
            "description": "Rate limit reached (3 messages per hour per sender address, 20 per IP). Wait for the Retry-After header. Please do not retry in a loop."
          }
        }
      }
    }
  }
}