Docs/Skills/Object Detector

Object Detector

Find and locate objects in images

OperationalCredits 10 per callp50 2200msImages

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.

Tool call
{
  "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"
    }
  }
}

Per-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.

ArgumentTypeDescription
imageOptionalstringThe image file to analyse (JPG, PNG, GIF or WebP, up to 10 MB), or a public image URL
minConfidenceOptionalnumberLowest confidence to return, from 0.05 to 1
default 0.5 · range 0.05–1
labelsOptionalPremiumstringComma-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.

Result
{
  "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.

FieldTypeExampleDescription
imageWidthnumber640Width of the upright image in pixels
imageHeightnumber480Height of the upright image in pixels
objectCountnumber5Number of objects returned
countsobject{…}Number of objects per label, such as {"car": 3}
counts.catnumber2
counts.remotenumber2
counts.couchnumber1
objectsarray[5]Detected objects, highest confidence first
objects.0.labelstringcatObject class, one of the 80 COCO labels
objects.0.confidencenumber0.999Model confidence from 0 to 1
objects.0.boxobject{…}Bounding box in pixels: x, y (top-left), width, height
objects.0.box.xnumber4Left edge in pixels
objects.0.box.ynumber51Top edge in pixels
objects.0.box.widthnumber320Box width in pixels
objects.0.box.heightnumber417Box height in pixels
objects.0.normalizedBoxobject{…}The same box as fractions (0-1) of image width and height
objects.0.normalizedBox.xPremiumnumber0.0063Left edge as a fraction of image width
objects.0.normalizedBox.yPremiumnumber0.1062Top edge as a fraction of image height
objects.0.normalizedBox.widthPremiumnumber0.5Box width as a fraction of image width
objects.0.normalizedBox.heightPremiumnumber0.8688Box height as a fraction of image height
minConfidencenumber0.5Confidence threshold applied
labelsobjectnullLabels 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.

StatusWhat it means
400 / 422The arguments did not validate. The message names the offending one.
401The OAuth session is invalid or expired — reconnect the server.
403Blocked by a key restriction or an IP allow-list. Never a bad identity.
404This skill is not part of VerveKit. Check the catalog.
429Out 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

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.

Call it as a REST APIOne HTTPS endpoint and an x-api-key header, with SDKs for Node, Python and .NET.APIVerve →Reference →
Was this page helpful?