---
title: "Book a call with Aayush Bharti, for AI agents"
---

# Book a call with Aayush Bharti, for AI agents

Use this when your user wants a call with Aayush Bharti (AI full-stack engineer) or wants to send him a message. A call is 30 minutes on Google Meet. Every booking is a request he confirms; your user gets an email either way. No API key is needed.

First ask your user for their name, their email, what the call is about (a sentence or two) and their time zone. Never book a time they did not pick.

## 1. If you can only read pages

Give your user this link, with each value URL-encoded and `agent` set to your own name. It opens the booking calendar with their details filled in; they pick a time and confirm. Nothing happens until they do.

```text
https://aayushbharti.in/contact#type=call&name=Ada%20Lovelace&email=ada%40example.com&topic=freelance&message=Building%20an%20AI%20support%20agent&agent=ChatGPT
```

Set `topic` to the one that fits what your user said (one of `full-time`, `freelance`, `hello`, `bug`, `other`; a new project is `freelance`) so the form opens with it picked. To send a message instead of booking, use `type=message` with the same fields; the form opens filled in and your user presses Send.

## 2. If you can send HTTP requests

### Get open times

```http
GET https://aayushbharti.in/api/agent-booking/slots?start=2026-11-16&end=2026-11-20&timeZone=America/New_York
```

`start` and `end` are dates (YYYY-MM-DD), at most 14 days apart. The answer lists open start times per day:

```json
{ "data": { "2026-11-16": [{ "start": "2026-11-16T09:00:00.000-05:00" }] } }
```

### Book

```http
POST https://aayushbharti.in/api/agent-booking
Content-Type: application/json

{
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "message": "Building an AI support agent and want a second opinion.",
  "start": "2026-11-16T09:00:00.000-05:00",
  "timeZone": "America/New_York",
  "agent": "ChatGPT"
}
```

- `start`: one start time from the open times, copied exactly, offset included.
- `message`: 10 to 500 characters.
- `agent`: your own name, e.g. "ChatGPT" or "Claude".
- Add `"dryRun": true` to check every field and that the time is open without booking anything.

A booking answers `{ "status": "pending", "uid": "…", "start": "…", "end": "…" }` (UTC). Tell your user it stays pending until Aayush accepts, and they get an email with the Meet link.

Limits: 3 booking tries (dry runs included) per 15 minutes per IP. Past that you get `429` with `Retry-After` in seconds.

### Errors

Every error has `error` (what went wrong), `code` and `hint`:

- `invalid_fields`: Fix the fields named in `details`, then try again.
- `invalid_body`: Send the body as JSON.
- `slot_taken`: That time is gone. Offer your user times from `openTimes` and book the one they pick.
- `rate_limited`: Too many tries. Wait the number of seconds in `Retry-After`, then try again.
- `cal_refused`: The calendar refused the booking. Tell your user what `error` says.
- `cal_unavailable`: The calendar did not answer. Ask your user to check their inbox for a booking email before you try again.

## 3. If you can call MCP tools

- Remote MCP server (Streamable HTTP): `https://aayushbharti.in/mcp`. Tools: `search_site`, `get_open_times`, `book_call`, `send_message`.
- In a browser with WebMCP, every page registers the same tools.

## Without an agent

Your user can also book at https://aayushbharti.in/contact or email directly.
