Overview
Detection uses DETR (DEtection TRansformer) with a ResNet-50 backbone, trained by Meta AI on COCO 2017 and released under Apache 2.0, run as an 8-bit quantized ONNX model on APIVerve's servers. The image is decoded, turned upright from its EXIF orientation and, if larger, scaled so its longer side is at most 1,333 pixels, which is the most the model reads. DETR predicts 100 candidate objects per image directly, with no anchor boxes or non-maximum suppression; candidates below `minConfidence` are dropped and the rest are mapped back to the original image size.
`confidence` is the model's class probability, 0 to 1, rounded to 4 places. `box` is in pixels of the upright image: `x` and `y` are the top-left corner, measured from the top-left of the image. `normalizedBox` divides those by `imageWidth` and `imageHeight`. Objects are sorted by confidence, and `counts` tallies the returned objects by label, after the `labels` filter.
`labels` accepts the 80 COCO class names (`traffic light`, `cell phone`, `dining table` and so on), case-insensitive, with underscores or hyphens for spaces, simple plurals and common synonyms (sofa, television, phone, bike, motorbike, fridge). An unknown label returns 400 naming it. URLs are downloaded by APIVerve from public hosts only, with a 10 MB limit; the image service never fetches caller URLs itself.
Live Test Object Detector Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as ObjectDetector. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "ObjectDetector",
"arguments": {}
}Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
imageOptional | string | The image file to analyse (JPG, PNG, GIF or WebP, up to 10 MB), or a public image URL |
minConfidenceOptional | number | Lowest confidence to return, from 0.05 to 1 default 0.5 · range 0.05–1 |
labelsOptionalPremium | string | Comma-separated object labels to keep, such as person,car,dog; all 80 labels when omitted length 0–500 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"imageWidth": 640,
"imageHeight": 480,
"objectCount": 5,
"counts": {
"cat": 2,
"remote": 2,
"couch": 1
},
"objects": [
{
"label": "cat",
"confidence": 0.999,
"box": {
"x": 4,
"y": 51,
"width": 320,
"height": 417
},
"normalizedBox": {
"x": 0.0063,
"y": 0.1062,
"width": 0.5,
"height": 0.8688
}
},
{
"label": "cat",
"confidence": 0.9987,
"box": {
"x": 331,
"y": 20,
"width": 309,
"height": 350
},
"normalizedBox": {
"x": 0.5172,
"y": 0.0417,
"width": 0.4828,
"height": 0.7292
}
},
{
"label": "remote",
"confidence": 0.9984,
"box": {
"x": 329,
"y": 67,
"width": 42,
"height": 128
},
"normalizedBox": {
"x": 0.5141,
"y": 0.1396,
"width": 0.0656,
"height": 0.2667
}
},
{
"label": "remote",
"confidence": 0.9975,
"box": {
"x": 29,
"y": 68,
"width": 160,
"height": 50
},
"normalizedBox": {
"x": 0.0453,
"y": 0.1417,
"width": 0.25,
"height": 0.1042
}
},
{
"label": "couch",
"confidence": 0.9961,
"box": {
"x": 0,
"y": 0,
"width": 636,
"height": 472
},
"normalizedBox": {
"x": 0,
"y": 0,
"width": 0.9938,
"height": 0.9833
}
}
],
"minConfidence": 0.5,
"labels": null
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
imageWidth | number | 640 | Width of the upright image in pixels |
imageHeight | number | 480 | Height of the upright image in pixels |
objectCount | number | 5 | Number of objects returned |
counts | object | {…} | Number of objects per label, such as {"car": 3} |
counts.cat | number | 2 | |
counts.remote | number | 2 | |
counts.couch | number | 1 | |
objects | array[5] | Detected objects, highest confidence first | |
objects.0.label | string | cat | Object class, one of the 80 COCO labels |
objects.0.confidence | number | 0.999 | Model confidence from 0 to 1 |
objects.0.box | object | {…} | Bounding box in pixels: x, y (top-left), width, height |
objects.0.box.x | number | 4 | Left edge in pixels |
objects.0.box.y | number | 51 | Top edge in pixels |
objects.0.box.width | number | 320 | Box width in pixels |
objects.0.box.height | number | 417 | Box height in pixels |
objects.0.normalizedBox | object | {…} | The same box as fractions (0-1) of image width and height |
objects.0.normalizedBox.xPremium | number | 0.0063 | Left edge as a fraction of image width |
objects.0.normalizedBox.yPremium | number | 0.1062 | Top edge as a fraction of image height |
objects.0.normalizedBox.widthPremium | number | 0.5 | Box width as a fraction of image width |
objects.0.normalizedBox.heightPremium | number | 0.8688 | Box height as a fraction of image height |
minConfidence | number | 0.5 | Confidence threshold applied |
labels | object | null | Labels the results were filtered to, or null for all |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Object Labels
The 80 COCO object classes the labels parameter accepts
| Value |
|---|
person |
bicycle |
car |
motorcycle |
airplane |
bus |
train |
truck |
boat |
traffic light |
fire hydrant |
stop sign |
parking meter |
bench |
bird |
cat |
dog |
horse |
sheep |
cow |
elephant |
bear |
zebra |
giraffe |
backpack |
umbrella |
handbag |
tie |
suitcase |
frisbee |
skis |
snowboard |
sports ball |
kite |
baseball bat |
baseball glove |
skateboard |
surfboard |
tennis racket |
bottle |
wine glass |
cup |
fork |
knife |
spoon |
bowl |
banana |
apple |
sandwich |
orange |
broccoli |
carrot |
hot dog |
pizza |
donut |
cake |
chair |
couch |
potted plant |
bed |
dining table |
toilet |
tv |
laptop |
mouse |
remote |
keyboard |
cell phone |
microwave |
oven |
toaster |
sink |
refrigerator |
book |
clock |
vase |
scissors |
teddy bear |
hair drier |
toothbrush |
Use cases
- Counting and Occupancy
- Count people, cars or bicycles in camera snapshots to measure footfall, parking use or traffic.
- Image Tagging
- Tag uploaded photos with the objects they contain so they can be searched and filtered in a media library.
- Content Checks
- Confirm that listing photos actually show the item for sale, such as a car, bicycle or couch, before they are published.
- Smart Cropping
- Crop images around the main subject using its bounding box instead of the centre of the frame.
Other ways to use Object Detector
Set up Object Detector on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.