Skip to main content
Use Roboflow through Corsair: one client, typed API calls. Find your key under Account, Roboflow Keys, or in the workspace settings. It goes in Authorization: Bearer, which the docs call the recommended transport; the api_key query parameter still works but puts the key in URLs and logs, so the plugin never uses it. Two hosts, two contracts:
  • api.roboflow.com for management: workspaces, projects, versions, models and image upload.
  • serverless.roboflow.com for inference. It is the Inference server’s interface, not the Platform API’s, with image URLs in the image query parameter and base64 images in the raw form body. Other options are query parameters.
Things to know before you rely on a response:
  • account.get returns 200 whether or not your key works. With no key it still answers a welcome message and instructions, so a successful status proves nothing. Only workspace appears for a valid key, and that is what the plugin’s authenticated field reports. Reading the 200 as a success is the easiest mistake to make here.
  • An inference model ID is project/version. Take it from models.list’s url, which is exactly what infer expects. A model not tied to a version is workspace/model and splits the same way; the plugin rejects an ID with no separator rather than sending a request that cannot resolve.
  • infer is billed per image. It is marked write for that reason and is never retried. The prediction payload is the Inference server’s and differs by task: a detection model returns boxes in predictions, single-label classification returns class scores in an array, multi-label classification returns a class-keyed object, and semantic segmentation returns a mask object. Instance segmentation adds points to each prediction.
  • A duplicate image upload is a success. images.upload answers duplicate: true with the existing image’s id and adds nothing. That is not a failure, and treating it as one would drop a valid image ID.
  • images.upload accepts a project slug or a workspace/project ID. Both use /dataset/{project}/upload with the project slug. The API key selects the workspace.
  • annotation is a shared label group. Projects in the same group share classes, so reusing one is how a second project starts from an existing label set. anomaly-detection additionally needs the feature turned on and a group no other project type uses.
  • license is required on a public plan. Private is what keeps a project private; any other value publishes it on Universe, and a public plan cannot create a private project at all.
  • versions come back newest first, and version.generating tells you whether the version is still being built — a progress under 1 means the image count is not final.
What you get:
  • 10 typed API operations

Setup

1

Install

2

Add the plugin

corsair.ts
With multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.
3

Choose authentication

4

Connect a tenant

Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.

Example API calls

List a project’s trained models
Run a model on an image
See the full list on the API page.

What’s next

API reference

Every roboflow.api.* operation with input and output types.

Connect / OAuth

createLink, Hub delivery, and tenant connect flows.

Use with agents

Expose this plugin’s operations as MCP tools.