AI + human labeling · Cloudflare edge
Every sample is answered by AI models and human labelers. Nothing is delivered until the votes agree under the quality tier you picked. Realtime in under two minutes, or batch for half the price.
How it works
A task is a vote. AI models and labelers each submit a label; labels that match under the task's tolerance form a cluster. The task settles the moment a cluster meets the quorum of its tier.
A structured prompt per task type asks a vision model for JSON in the exact label shape. A labeler gets the same image with the same question at the same moment.
Grid cells must match as a set, clicks within a pixel radius, boxes by IoU, text after normalisation. Geometric clusters deliver the mean, so five clicks return the centre.
If the AI and the human disagree, one more labeler is asked, until two votes agree. Two humans can overrule the model. Past the cap, the task escalates to review instead of delivering noise.
Cheapest. Humans enter only when the model pool runs out without a quorum.
One model and one labeler in parallel; disagreement adds labelers one at a time until two votes match.
For ground truth and evaluation sets. The AI vote is a hint that can only be part of a bigger cluster.
Pricing
A yes/no question and a bounding box are not the same amount of work, for a model or for a person. Prices are per 1,000 samples in the verified tier; you are charged only when a task settles.
| Task type | Answer | Realtime | Batch | Agreement rule |
|---|---|---|---|---|
| Yes / no about an imageimage_yesno | true · false | $10 | $5 | equal |
| Select matching grid cellsgrid_select | [0, 4, 7] | $10 | $5 | same set of cells |
| Click the requested objectsclick_points | [{x, y}] | $12 | $6 | every point within 20 px |
| Transcribe the characterstranscribe_text | "x7k2pq" | $15 | $8 | equal after normalisation |
| Drag pieces to their targetsdrag_pieces | [{from, to}] | $25 | $12 | both ends within 20 px |
| Slider puzzle offsetslide_offset | 137 | $25 | $12 | within 5 px |
| Draw bounding boxesbounding_boxes | [{x, y, w, h, label}] | $50 | $25 | IoU ≥ 0.7, same label |
Escalated and failed tasks are never charged. Realtime tasks that hit the 120 s deadline without a quorum are delivered best-effort, flagged as such, at the batch price. Volume and custom task types on request.
API
Send an image and a task type. Poll the task or register a webhook; the payload carries the label, who agreed on it, and the cluster it came from. Coordinates are always pixels of the image you sent.
create a task
# realtime, verified tier (defaults) curl https://boundbox.ai/v1/tasks \ -H "Authorization: Bearer $BOUNDBOX_KEY" \ -H "Content-Type: application/json" \ -d '{ "task_type": "grid_select", "image_url": "https://…/captcha.png", "width": 300, "height": 300, "prompt": "cells with a bus", "config": { "rows": 3, "cols": 3 } }'
webhook · task.settled
{
"event": "task.settled",
"task": {
"id": "tsk_fkqg1zigqgks",
"state": "settled", "outcome": "consensus",
"label": [0, 4],
"source": "mixed",
"agreement": { "clusters": [{ "size": 2, "humans": 1, "ais": 1 }],
"quorum": 2, "min_human": 1 },
"price_usd": 0.01
}
}
Quality
Samples with a known answer are mixed into every labeler's queue. Accuracy on them drives a trust score that gates who gets work.
At settlement, every vote is marked as inside or outside the winning cluster. Labelers who keep landing outside stop receiving that task type.
A task snapshots its tolerances, prompt and quorum at creation. A catalogue change never re-scores a task in flight.
Every state transition, vote, model cost and payout is a ledger row you can ask for. No label without a reason attached.