Use case
How to get structured input from a person your agent can’t reach in chat
Oct 27, 2026 · 6 min read
The problem
Most agents only talk to one person: whoever is typing in the chat. Real tasks need more people than that. A repairs agent needs a plumber’s availability and quote. A recruiting agent needs a candidate’s start date. A support agent needs a customer’s new address. None of them are in the conversation, and none of them want to install anything or sign up to answer one question.
The usual workarounds are an email thread that the agent has to parse (“Tuesday works, maybe Wednesday, around 300?”), a Google Form someone builds by hand for every new question, or a custom page your team builds and then has to maintain.
The pattern: schema in, link out, JSON back
Run it by turns the question into a link. Your agent describes what it needs as a JSON Schema, the same format it already uses for tool calls, and gets a URL back. The person opens it on their phone, fills a short form with no sign-up, and the answer comes back to your agent as JSON that already matches the schema.
-
Ask. Call
createRequest(MCP tool orPOST /v1/requests) with a schema and who should answer. - Send. The response has one link per person. Send it over the channel you already have: email, SMS, WhatsApp, Slack.
-
Get the answer. It arrives at your webhook, or the agent reads it later with
getStatus.
Example: a quote from a plumber
A property-management agent needs a leaking pipe fixed. It asks the plumber for the earliest date, a price and anything it should know:
{
"mode": "form",
"title": "Leak at 14 Elm St, unit 3",
"requester": "Ava (the Elm Properties maintenance agent)",
"audience": { "kind": "named", "recipients": [{ "name": "Sam Ortiz", "phone": "+1 415 555 0100" }] },
"schema": {
"type": "object",
"required": ["earliestDate", "quote"],
"properties": {
"earliestDate": { "type": "string", "format": "date", "title": "Earliest day you can come" },
"quote": { "type": "number", "minimum": 0, "title": "Estimate (USD)" },
"notes": { "type": "string", "title": "Anything we should know?", "x-runitby": { "widget": "textarea" } }
}
},
"expiresIn": "48h",
"webhookUrl": "https://example.com/hooks/runitby"
}
Sam gets a link by text message, sees who is asking (the account’s verified name is on every page, whatever the agent calls itself), picks a date, types a number and sends it. Your webhook receives:
{
"event": "response.created",
"recipient": { "name": "Sam Ortiz" },
"response": { "data": { "earliestDate": "2026-11-03", "quote": 280, "notes": "Bring access to the basement." } }
}
No parsing, no follow-up “sorry, which Tuesday?”. The date is a date and the quote is a number, because the form wouldn’t accept anything else.
One person, several, or anyone
- Named recipients (1 to 50) each get their own link, so every answer is attributed to a person. Add an email and the agent can send reminders.
-
An open link takes answers from anyone who has it, up to
maxSubmissions. Use it for sign-ups or a quick team survey. - Approvals are the yes-or-no version, with a policy for how many people must agree. See approvals before your agent spends money.
Where this fits
- Quotes and availability from contractors, suppliers or venues.
- Missing details from customers: shipping address, order preferences, a photo-free description of a problem.
- Onboarding facts from a new hire or a new client: start date, tax ID country, preferred equipment.
- Sign-off from a landlord, a parent or a manager who will never open your app.
- Collecting the same few answers from a team, without a survey tool.
If the person you need is the one already chatting with your agent, you may not need a link at all: some MCP clients can ask them directly. We compare the two in Run it by vs building it yourself and MCP elicitation.
Try it with your agent
Free for 100 requests a month, no card. Add the MCP server from Claude Code or Codex with one command, or use the REST API.