Quick Start Guide
Get real human feedback in 5 minutes — free. Sign up, mint a free test-mode API key, and build your entire integration — including webhooks — against free synthetic responses before you ever touch a payment form.
Create Your Account
Sign up at /requestor/signup or call the signup API directly:
curl -X POST https://www.getabrain.ai/api/v1/requestor/auth/signup \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.com",
"password": "SecurePass123",
"full_name": "Jane Smith",
"company_name": "Acme AI",
"accepted_terms": true,
"accepted_requestor_agreement": true
}'You get back your credentials in one shot:
{
"user": { "id": "abc123", "email": "you@company.com", "company_name": "Acme AI", "balance_cents": 0, "email_verified": false },
"api_key": "gab_k_xxxxx",
"api_secret": "gab_s_xxxxx",
"access_token": "eyJhbG...",
"refresh_token": "eyJhbG..."
}Save your api_secret immediately. It is only shown once at signup and cannot be retrieved later.
Mint a Free Test-Mode Key
Pass {"mode":"test"} when creating a key and you get back a completely normal gab_k_ / gab_s_pair — there is no special prefix, the test-ness is just a flag on that key. Queries submitted with a test-mode key never touch billing and return synthetic responses marked simulated: true, so you can build your whole integration, webhooks included, before adding funds.
curl -X POST https://www.getabrain.ai/api/v1/requestor/keys \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "mode": "test" }'When you're ready to pay real workers, add funds via Stripe (returns a checkout_url to open in a browser) and use a live key instead:
curl -X POST https://www.getabrain.ai/api/v1/requestor/billing/checkout \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "amount_cents": 5000 }'How billing works:
- Prepaid balance model — no subscriptions or monthly fees
- Minimum bid per response: $0.05 (5 cents)
- Platform fee: 15%, added on top of your bid (not deducted from the worker's pay)
- Total cost = (bid + bonus) × required_responses, plus the 15% platform fee
- Balance is deducted when you create a query, refunded if you cancel
- Optional auto-reload: set a threshold and reload amount to never run out
Send Your First Query
POST a query to get real human responses. Choose from 16 query types. Here is the simplest example — a text question:
curl -X POST https://www.getabrain.ai/api/v1/requestor/queries \
-H "X-API-Key: gab_k_xxxxx" \
-H "X-API-Secret: gab_s_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"type": "text",
"title": "Landing page feedback",
"description": "We need honest feedback on our new design",
"content_data": {
"question": "What is your first impression of this landing page?",
"context": "We just redesigned our homepage."
},
"required_responses": 5,
"bid_amount_cents": 50
}'Response:
{
"id": "query_abc123",
"type": "text",
"title": "Landing page feedback",
"description": "We need honest feedback on our new design",
"required_responses": 5,
"bid_amount_cents": 50,
"bonus_amount_cents": 0,
"total_cost_cents": 250,
"status": "active",
"created_at": "2026-02-16T12:00:00Z",
"expires_at": null
}Understanding bids
bid_amount_centsis what each worker earns per response. Set higher bids to attract more and better workers faster. The minimum is 5 cents. For complex tasks (video review, long-form writing), $0.50–$2.00 is typical. You can also add a bonus_amount_cents that workers earn for writing thoughtful comments.
Get Your Results
Poll your query to check for responses, or configure a webhook for real-time push.
Polling
curl https://www.getabrain.ai/api/v1/requestor/queries/query_abc123 \ -H "X-API-Key: gab_k_xxxxx" \ -H "X-API-Secret: gab_s_xxxxx"
{
"id": "query_abc123",
"status": "completed",
"completed_responses": 5,
"responses": [
{
"id": "resp_001",
"response_data": {
"answer": "The hero section is eye-catching. The CTA button could be more prominent.",
"reasoning": "I looked at the overall visual hierarchy."
},
"worker": { "quality_score": 4.2, "tier": "Gold" },
"submitted_at": "2026-02-16T12:05:00Z"
},
...
]
}Webhooks (recommended for production)
Include a webhook_url in your query creation request, or set an account-level default with PUT /requestor/webhook. We POST a signed JSON payload on each response and on completion. See the Webhooks guide.
Rate Workers (Optional)
Rate each response 1–5 stars to improve the quality of future workers assigned to your queries. Workers with consistently low ratings are automatically suspended.
curl -X POST https://www.getabrain.ai/api/v1/requestor/queries/query_abc123/responses/resp_001/rate \
-H "X-API-Key: gab_k_xxxxx" \
-H "X-API-Secret: gab_s_xxxxx" \
-H "Content-Type: application/json" \
-d '{ "score": 5, "feedback_text": "Excellent, detailed feedback." }'For AI Agents
GetABrain ships an MCP server (@getabrain/mcp-server) so agents in Claude Desktop, Cursor, Claude Code, or any MCP-compatible client can call ask_humanand friends directly as tools — no custom integration code required. Drop your API key/secret from Step 1 into the config below:
{
"mcpServers": {
"getabrain": {
"command": "npx",
"args": ["-y", "@getabrain/mcp-server"],
"env": {
"GETABRAIN_API_KEY": "gab_k_xxxxx",
"GETABRAIN_API_SECRET": "gab_s_xxxxx"
}
}
}
}Building your own agent framework instead? Point any OpenAPI-aware tool generator (LangChain, OpenAI function calling, custom orchestrators) at the canonical spec and it will auto-generate typed tools for every endpoint:
https://www.getabrain.ai/api/v1/openapi.json
Prefer to browse it interactively first? See the API Reference.
All Query Types at a Glance
Choose the right type for your task. See the full Query Types reference for complete schemas.
| Type | Use When You Need | Example |
|---|---|---|
text | Open-ended written answers | "What do you think of this design?" |
multiple_choice | Picking from options | "Which feature matters most?" |
rating_scale | Numeric ratings (with optional media) | "Rate this product photo 1-10" |
image_comparison | Choosing between images | "Which logo is more professional?" |
ranking | Ordering items by preference | "Rank these features by importance" |
yes_no | Binary decisions | "Is this headline effective?" |
sentiment | Emotional analysis | "What is the sentiment of this review?" |
image_selection | Selecting matching images | "Pick all photos suitable for a listing" |
free_form_text | Long-form writing | "Write a product description" |
video_review | YouTube video feedback | "Review this tutorial video" |
audio_review | Audio content feedback | "Review this podcast episode" |
image_analysis | Detailed image analysis | "Describe what you see in this photo" |
ab_test | Comparing two variants | "Which landing page converts better?" |
voice_capture | Worker-recorded voice note | "Record a 30-second reaction to this ad" |
video_capture | Worker-recorded video | "Film yourself unboxing this product" |
photo_capture | Worker-captured photo | "Take a photo of your desk setup" |
More Examples
Sentiment Analysis
{
"type": "sentiment",
"title": "Analyze tweet sentiment",
"content_data": {
"question": "What is the sentiment of this text?",
"subject": "Just tried the new feature and it completely changed my workflow!",
"require_reasoning": true
},
"required_responses": 5,
"bid_amount_cents": 10
}A/B Test with Images
{
"type": "ab_test",
"title": "Landing page A/B test",
"content_data": {
"question": "Which design do you prefer and why?",
"variant_a": {
"description": "Minimalist hero with large image",
"image_url": "https://example.com/design-a.png"
},
"variant_b": {
"description": "Feature-rich layout with testimonials",
"image_url": "https://example.com/design-b.png"
}
},
"required_responses": 20,
"bid_amount_cents": 25
}Rating Scale with Media
{
"type": "rating_scale",
"title": "Rate this product video",
"content_data": {
"question": "How would you rate the overall quality?",
"scale_type": "stars",
"scale_min": 1,
"scale_max": 5,
"scale_labels": { "min_label": "Poor", "max_label": "Excellent" },
"criteria": ["Visual quality", "Audio clarity", "Content value"],
"media_video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
"required_responses": 10,
"bid_amount_cents": 30
}Image Comparison
{
"type": "image_comparison",
"title": "Logo design preference",
"content_data": {
"question": "Which logo is more professional?",
"comparison_type": "preference",
"require_reasoning": true,
"images": [
{ "id": "a", "url": "https://example.com/logo-a.png", "label": "Option A" },
{ "id": "b", "url": "https://example.com/logo-b.png", "label": "Option B" }
]
},
"required_responses": 10,
"bid_amount_cents": 20
}Common Query Parameters
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | One of the 16 query types |
title | string | Yes | Short title shown to workers |
description | string | No | Longer description for workers |
content_data | object | Yes | Type-specific data (question, images, etc.) |
required_responses | integer | Yes | How many worker responses you want |
bid_amount_cents | integer | Yes | Pay per response in cents (min 5) |
bonus_amount_cents | integer | No | Extra pay for thoughtful comments |
expires_in_hours | integer | No | Auto-expire after N hours |
min_worker_quality | number | No | Min quality score 0-5 (0 = any) |
webhook_url | string | No | Public https URL to receive signed event notifications |