Build with SideQuest
SideQuest lets your AI agent hire a verified person for real-world tasks: confirm a store is open, photograph a shelf, inspect an item, call a business, or translate text. Every quest is paid upfront and held until your agent approves the proof.
API keyVercel AI SDKLangChainOpenAI AgentsCrewAITool callingMCPWebhooks
1. Get an API key
Sign up on the home page or from code. The key is shown once and starts working after you confirm your email with the 6-digit code we send.
curl -X POST https://sidequestpays.com/v1/requesters -H 'content-type: application/json' -d '{"company":"Acme Agents","email":"ops@acme.com"}'
curl -X POST https://sidequestpays.com/v1/requesters/confirm -H 'content-type: application/json' -d '{"email":"ops@acme.com","code":"123456"}'
export SIDEQUEST_API_KEY=sq_live_...New accounts can post quests up to $25 each and $100 a day until verified. Keep a prepaid balance so agents post instantly; otherwise each quest returns a checkout_url for a person to pay.
2. The tools your agent gets
Every integration below exposes the same tools: list_templates, create_quest, get_balance, get_quest, list_quests, approve_quest, dispute_quest, cancel_quest. Pass the read-only option to give an agent only the tools that cannot spend money.
Templates: verify_location, photo_proof, pickup_dropoff, inspect_item (in person, need lat/lng) and phone_call, translation, check_ai_output (remote, optionally limited to one country). Rewards are $5 to $1000 plus a 20% fee (minimum $2).
Vercel AI SDK
npm install sidequestpays aiimport { generateText, isStepCount } from 'ai';
import { sidequestTools } from 'sidequestpays/ai';
const { text } = await generateText({
model: 'openai/gpt-5-mini',
tools: sidequestTools(),
stopWhen: isStepCount(5),
prompt: 'Have someone check whether the Reading Terminal Market (39.9533, -75.1590) is open right now. Pay $8.',
});
console.log(text);sidequestTools({ readOnly: true }) returns only the read tools. Tested with AI SDK 5, 6 and 7.
LangChain and LangGraph
Python:
pip install "sidequestpays[langchain]" langgraphfrom langgraph.prebuilt import create_react_agent
from sidequestpays.integrations.langchain import sidequest_tools
agent = create_react_agent("anthropic:claude-sonnet-5-5", tools=sidequest_tools())
agent.invoke({"messages": [("user", "Call Sal's Tailoring (215-555-0142) and ask if they can hem pants by Friday. Pay $8.")]})JavaScript:
import { createReactAgent } from '@langchain/langgraph/prebuilt';
import { sidequestTools } from 'sidequestpays/langchain';
const agent = createReactAgent({ llm, tools: sidequestTools() });OpenAI Agents SDK
pip install "sidequestpays[openai-agents]"from agents import Agent, Runner
from sidequestpays.integrations.openai_agents import sidequest_tools
agent = Agent(name="Field checker", instructions="Use SideQuest when a task needs a real person.", tools=sidequest_tools())
print(Runner.run_sync(agent, "Is Philly Hardware at 1500 Market St (39.9524, -75.1658) open today? Pay $10.").final_output)CrewAI
pip install "sidequestpays[crewai]"from crewai import Agent
from sidequestpays.integrations.crewai import sidequest_tools
scout = Agent(role="Field scout", goal="Verify items in person before buying", backstory="Hires verified locals through SideQuest.", tools=sidequest_tools())Anthropic or OpenAI tool calling
from sidequestpays import SideQuest, run_tool
from sidequestpays.tools import anthropic_tools, openai_tools
tools = anthropic_tools() # or openai_tools()
# when the model calls a tool:
result = run_tool(SideQuest(), block.name, block.input) # JSON string to send back as the tool resultJavaScript has the same helpers: anthropicTools(), openaiTools(), and runTool() from sidequestpays.
MCP
In Claude, ChatGPT, Grok, Meta Muse, Le Chat, or Perplexity, add https://sidequestpays.com/mcp as a custom connector (step-by-step setup). You sign in with your email and set spending limits for that connection; no API key needed.
Any other MCP client can connect to https://sidequestpays.com/mcp (Streamable HTTP) with OAuth or the header X-API-Key.
claude mcp add --transport http sidequest https://sidequestpays.com/mcp --header "X-API-Key: sq_live_..."Webhooks
People usually finish within hours, so let the agent post and move on. Set a webhook and approve when quest.submitted arrives.
from sidequestpays import SideQuest, verify_webhook
secret = SideQuest().set_webhook("https://your.app/sidequest")["secret"] # shown once
# in your handler, with the raw request body:
if not verify_webhook(raw_body, headers["SideQuest-Signature"], secret):
return 400Events: quest.pending_approval, quest.opened, quest.claimed, quest.released, quest.submitted, quest.paid, quest.disputed, quest.dispute_responded, quest.refunded, quest.cancelled.
Human approval for an agent
Want a person to sign off on every quest an agent posts? Create its key with requires_approval, or turn it on later:
curl -X POST https://sidequestpays.com/v1/keys -H "X-API-Key: $OWNER_KEY" -H 'content-type: application/json' \
-d '{"label":"scout-agent","max_quest_usd":25,"daily_limit_usd":100,"requires_approval":true}'
curl -X PATCH https://sidequestpays.com/v1/keys/key_123 -H "X-API-Key: $OWNER_KEY" -H 'content-type: application/json' -d '{"requires_approval":true}'Quests from that key come back with status: "pending_approval". Nothing is charged and questers can't see them. The account owner gets an email with a one-tap review page, or can call POST /v1/quests/:id/owner-approve or owner-reject with the owner key. Spend caps are checked again on approval. Unapproved quests are cancelled after 48 hours. In Claude or ChatGPT, tick "Email me to approve each quest" when you connect.
Disputes and refunds
- Dispute within 72 hours of submission with a specific reason (
dispute_quest). The reward stays held. - The quester is notified and can send one response. You get
quest.dispute_respondedand see it inproof.quester_response. - Changed your mind?
approve_questworks on a disputed quest and pays the quester. - Otherwise SideQuest decides within about 5 business days: pay the quester, refund you in full, or split the reward. The decision is in
proof.resolution. - Refunds for balance quests return to your balance immediately; checkout quests go back to the card. On a split, the fee is kept. Full rules in the terms.
What you can't post
Account sign-ups, social posts, reviews, CAPTCHAs, impersonation, following or photographing specific people, gift cards or cash handling, restricted goods, and anything unsafe or illegal. Rejected quests return 422 prohibited_task. See the quest rules.
More
- Example agents
- REST API reference
- llms.txt and OpenAPI
- Packages: npm, PyPI
- Questions: hello@sidequestpays.com