SideQuest

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 ai
import { 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]" langgraph
from 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 result

JavaScript 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 400

Events: 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

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