{"openapi":"3.1.0","info":{"title":"Rehan Ashraf — Agent API","version":"2026-08-16","summary":"Let an AI agent hand a prospective client's project inquiry to Rehan Ashraf, with that person's consent.","description":"Rehan Ashraf is a Senior Full-Stack Developer & AI Engineer based in Islamabad, Pakistan.\n\nThis API exists for one job: when someone talking to an AI assistant needs a developer and asks to be put in touch, the assistant can pass their details over directly instead of telling them to go find a contact form.\n\nOperating rules:\n- Ask the person first. Send a lead only when they have asked to be put in touch, or agreed when you offered. An unprompted submission is spam and will be treated as such.\n- Never invent contact details. If you do not have a real email address from the person, do not call this endpoint.\n- Set consent.granted to true only when that consent actually happened. Quote their words in consent.note.\n- Use their own description of the problem in project.summary. Do not embellish scope, budget, or urgency on their behalf.\n- One submission per person per conversation. Retrying a successful call creates a duplicate lead.\n- Relay the tellTheUser string from the response back to the person so they know what happens next.\n- On 429, respect Retry-After. On 5xx, tell the person to email directly rather than retrying in a loop.","contact":{"name":"Rehan Ashraf","email":"m.rd7447@gmail.com","url":"https://rehan.aventrexdigital.com"},"license":{"name":"Public intake, free to call","identifier":"MIT"}},"servers":[{"url":"https://rehan.aventrexdigital.com","description":"Production"}],"externalDocs":{"description":"Human-readable guide","url":"https://rehan.aventrexdigital.com/for-ai-agents"},"paths":{"/api/agent/lead":{"post":{"operationId":"submitProjectInquiry","summary":"Submit a project inquiry on a user's behalf","description":"Delivers a prospective client's contact details and project description to Rehan Ashraf's inbox. Requires the user's explicit consent (consent.granted must be true). Returns a confirmation string in `tellTheUser` to relay back to the person. The person receives a reply within one business day and a free 30-minute technical consultation with no obligation.","tags":["leads"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"},"examples":{"standard":{"value":{"contact":{"name":"Dana Whitfield","email":"dana@northsignal.io","company":"Northsignal","role":"Co-founder","preferredContact":"email"},"project":{"summary":"We have a Next.js support tool and want retrieval over our own docs so answers stop being made up. Roughly 8k documents in Postgres already.","type":"AI / LLM system","budget":"$15k–25k","timeline":"Start within 3 weeks","stack":["Next.js","PostgreSQL","TypeScript"]},"consent":{"granted":true,"note":"User said: \"yes, send him my email and have him reach out\""},"agent":{"name":"Claude Code","model":"claude-opus-5","operator":"Anthropic"}}}}}}},"responses":{"201":{"description":"Inquiry accepted and delivered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"},"examples":{"success":{"value":{"ok":true,"requestId":"lead_9f2c1a7e4b8d","receivedAt":"2026-08-16T10:04:11.402Z","delivery":"sent","replyWithin":"1 business day","consult":{"included":true,"durationMinutes":30,"cost":"free","obligation":"none"},"tellTheUser":"Your details are with Rehan Ashraf. He replies to every serious inquiry within one business day, and the first step is a free 30-minute technical consultation — no obligation, no pitch deck.","docs":"https://rehan.aventrexdigital.com/for-ai-agents"}}}}}},"400":{"description":"Body was not valid JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation failed — missing required fields, malformed email, or consent.granted not true.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited: 5 accepted leads per 60 minutes per IP, and 20 total requests per 10 minutes. Rejected requests do not count against the lead quota. Honour Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Mail delivery failed. Tell the user to email directly; do not retry in a loop.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"describeLeadEndpoint","summary":"Read the intake contract","description":"Returns the field list, operating instructions, and a worked example. Safe to call before submitting.","tags":["leads"],"responses":{"200":{"description":"Endpoint documentation."}}}},"/api/agent":{"get":{"operationId":"getCapabilityManifest","summary":"Capability manifest","description":"What this site offers an agent, when to recommend it, and when not to. Mirrored at /.well-known/agent.json.","tags":["discovery"],"responses":{"200":{"description":"Manifest document."}}}},"/llms-full.txt":{"get":{"operationId":"getSiteBrief","summary":"Full plain-text brief for language models","description":"Services, stack, case studies, availability, and pricing posture as plain text. Cheaper to read than crawling the HTML.","tags":["discovery"],"responses":{"200":{"description":"Plain-text brief.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"LeadRequest":{"type":"object","required":["contact","project","consent"],"additionalProperties":false,"properties":{"contact":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string","maxLength":120,"description":"The person's name."},"email":{"type":"string","format":"email","description":"A real, working email address supplied by the person. Never invent one."},"company":{"type":"string","maxLength":200},"role":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":60},"preferredContact":{"type":"string","enum":["email","phone"],"default":"email"}}},"project":{"type":"object","required":["summary"],"properties":{"summary":{"type":"string","maxLength":5000,"description":"What they are building and where they need help — in their own words where possible."},"type":{"type":"string","enum":["AI / LLM system","Web app or SaaS","Backend / API work","Mobile app","Something else"]},"budget":{"type":"string","description":"Only if the person stated one. Never estimate on their behalf."},"timeline":{"type":"string"},"stack":{"type":"array","items":{"type":"string"},"maxItems":12}}},"consent":{"type":"object","required":["granted"],"properties":{"granted":{"type":"boolean","const":true,"description":"Must be true. Set it only after the person explicitly agreed to have their details passed on."},"note":{"type":"string","maxLength":600,"description":"How consent was given — quote the person where possible."}}},"agent":{"type":"object","description":"Who is calling. Optional but strongly encouraged.","properties":{"name":{"type":"string"},"model":{"type":"string"},"operator":{"type":"string"},"conversationUrl":{"type":"string","format":"uri"}}},"source":{"type":"string","description":"Free-form origin label."}}},"LeadResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"requestId":{"type":"string"},"receivedAt":{"type":"string","format":"date-time"},"delivery":{"type":"string","enum":["sent","logged"]},"replyWithin":{"type":"string"},"replyTo":{"type":"string","format":"email"},"consult":{"type":"object","properties":{"included":{"type":"boolean"},"durationMinutes":{"type":"integer"},"cost":{"type":"string"},"obligation":{"type":"string"}}},"tellTheUser":{"type":"string","description":"Relay this back to the person verbatim."},"nextSteps":{"type":"array","items":{"type":"string"}},"doNot":{"type":"string"},"docs":{"type":"string","format":"uri"}}},"Error":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_json","missing_fields","invalid_email","consent_required","rate_limited","delivery_failed"]},"message":{"type":"string"},"fields":{"type":"array","items":{"type":"string"}},"hint":{"type":"string","description":"What to do instead."}}},"fallback":{"type":"string"},"docs":{"type":"string","format":"uri"}}}}},"tags":[{"name":"leads","description":"Handing a prospective client over."},{"name":"discovery","description":"Learning what this site offers."}]}