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.comfor management: workspaces, projects, versions, models and image upload.serverless.roboflow.comfor inference. It is the Inference server’s interface, not the Platform API’s, with image URLs in theimagequery parameter and base64 images in the raw form body. Other options are query parameters.
account.getreturns200whether or not your key works. With no key it still answers a welcome message and instructions, so a successful status proves nothing. Onlyworkspaceappears for a valid key, and that is what the plugin’sauthenticatedfield reports. Reading the200as a success is the easiest mistake to make here.- An inference model ID is
project/version. Take it frommodels.list’surl, which is exactly whatinferexpects. A model not tied to a version isworkspace/modeland splits the same way; the plugin rejects an ID with no separator rather than sending a request that cannot resolve. inferis billed per image. It is markedwritefor that reason and is never retried. The prediction payload is the Inference server’s and differs by task: a detection model returns boxes inpredictions, 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 addspointsto each prediction.- A duplicate image upload is a success.
images.uploadanswersduplicate: truewith the existing image’sidand adds nothing. That is not a failure, and treating it as one would drop a valid image ID. images.uploadaccepts a project slug or a workspace/project ID. Both use/dataset/{project}/uploadwith the project slug. The API key selects the workspace.annotationis 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-detectionadditionally needs the feature turned on and a group no other project type uses.licenseis required on a public plan.Privateis what keeps a project private; any other value publishes it on Universe, and a public plan cannot create a private project at all.versionscome back newest first, andversion.generatingtells you whether the version is still being built — aprogressunder 1 means the image count is not final.
- 10 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
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 modelsWhat’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.