api-key header. The base URL is https://api.rocketlane.com/api and every route carries its own version segment (/1.0/...). Things to know before you call:
- Paging is a token, not a page number. Each list returns its records under a named array (
tasks,projects, …) withnext_page_token,has_moreand the provider’spaginationblock; passnext_page_tokenback aspage_token. The token expires after 15 minutes, so a paginated walk has to keep moving rather than pausing between pages. - Filters are
field.operatorquery keys. Rocketlane reads a filter as a key such asprojectName.cn, with a documented operator set:eq,cn,nc,oneOf,noneOf, and the numericgt/ge/lt/le. Each filter accepts only the operators the reference lists for it, so a typo fails before the request instead of being dropped.matchsets how filters combine (allorany), andsort_orderisASCorDESC. - Statuses are numbers with labels. A project or task
statuscomes back as{ value, label }; filter and set it byvalue. The OpenAPI document types the filter as a string while its example is the bare number1, sotasks.listaccepts either fortask_statusandproject_status. - Team members get an email. Rocketlane emails an invite to every user added through
team_member_idsonprojects.create. - Create needs a customer and an owner.
projects.createtakes acustomerblock naming either a company id or a company name, and anownerblock naming either a user id or an email. A block that names neither is rejected before the request is sent. - Ids live in the path, never the body.
tasks.update,projects.updateandcompanies.updatesend the id in the URL and the changed fields in the body. The update calls take fewer fields than create: a task’s project, phase, assignees and followers, and a project’s customer and members, are not part of an update and are rejected. - Deletes answer 204.
tasks.delete,projects.delete,companies.deleteandtimeEntries.deletereturn no body, so the plugin reports{ success: true, id }from the id you sent. These are permanent, which is why they are marked destructive. - Archiving is not deleting.
projects.archiveposts to the project’s/archiveaction and keeps the records, so it is a write rather than a destructive call. - An unknown id answers 403, not 404. A get or delete on an id that does not exist on the instance comes back as
403 Forbidden, so it is not retried. - Lists trail writes by a few seconds. A list right after a create can miss the new record, so poll rather than read once.
- Time entries are capped per day. Rocketlane rejects entries that would push a single day past 1440 minutes; the plugin requires at least one minute per entry but cannot see the other entries already logged for that day.
- Retries. Rocketlane documents no throughput window and no
Retry-After, so a 429 is retried three times with exponential backoff. A 5xx is retried only for a call the plugin declared read-only, never for a create.
- 22 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 tasks in a projectWhat’s next
API reference
Every
rocketlane.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.